Цикл Java 3 раза перед правильным выводом


Я делаю приложение, которое опрашивает вас по политике или астрономии.

Моя проблема в том, что когда вы говорите «политика» или «астрономия», он еще 2 раза спросит вас о вашем вводе, прежде чем дать желаемый результат «теста».

Вот код:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        do {
            if (getAnswer().equalsIgnoreCase("neither")) {
                System.out.println("Please enter \'astronomy\' or \'politics\'.");
            }
        getAnswer();
        }
        while(getAnswer().equalsIgnoreCase("neither"));
    System.out.println("test");
    }
    public static String getAnswer() {
        Scanner quizType = new Scanner(System.in);
        System.out.println("Would you like to be quizzed on politics or astronomy?");
        String typeAnswer = quizType.next();
        if (typeAnswer.equalsIgnoreCase("politics")) {
            return "politics";
        }
        else if (typeAnswer.equalsIgnoreCase("astronomy")) {
            return "astronomy";
        }
        else {
            return "neither";
        }
    }
}

Есть идеи? Спасибо

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
122
2

Ответы 2

Там нет нуждыgetAnswer() 3 раза, просто getAnswer() в переменную String, и все готово.

Как это:

public static void main(String[] args) {
        String answer = "";
        do {
            answer = getAnswer();
            if (answer.equalsIgnoreCase("neither")) {
                System.out.println("Please enter \'astronomy\' or \'politics\'.");
            }
        } while (answer.equalsIgnoreCase("neither"));
        System.out.println("test");
    }

    public static String getAnswer() {
        Scanner quizType = new Scanner(System.in);
        System.out.println("Would you like to be quizzed on politics or astronomy?");
        String typeAnswer = quizType.next();
        if (typeAnswer.equalsIgnoreCase("politics")) {
            return "politics";
        } else if (typeAnswer.equalsIgnoreCase("astronomy")) {
            return "astronomy";
        } else {
            return "neither";
        }
    }

Спасибо! Кстати, знаете ли вы, хороший ли это плейлист для изучения Java:

Brian E. 02.05.2018 15:48

Если вы изучаете do-while, вам нужно только подсказывать внутри своего do. В настоящее время вы звоните getAnswer три раза, что приводит к повторному запросу.

Вот быстрый способ решить эту проблему с помощью do-while

public static void main(String[] args) {
    List<String> validAnswers = Arrays.asList("neither","politics","astronomy");
    String answer;

    do {
        answer = promptForAnswer();
    } while(!validAnswers.contains(answer));

    System.out.println("test");
}

public static String promptForAnswer() {
    System.out.println("Would you like to be quizzed on politics or astronomy?");

    return new Scanner(System.in).next();
}

Или вы можете использовать цикл while ...

public static void main(String[] args) {
    List<String> validAnswers = Arrays.asList("neither","politics","astronomy");

    while(!validAnswers.contains(promptForAnswer())) {
        System.out.println("That was not a valid response, try again!");
    }

    System.out.println("test");
}

public static String promptForAnswer() {
    System.out.println("Would you like to be quizzed on politics or astronomy?");

    return new Scanner(System.in).next();
}

Другие вопросы по теме