Java зацикливается 3 раза, прежде чем дать правильный вывод - PullRequest
0 голосов
/ 02 мая 2018


Я подаю заявку, которая проверяет вас по политике или астрономии.

Моя проблема в том, что когда вы говорите «политика» или «астрономия», он еще 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";
        }
    }
}

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

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Если вы изучаете do-while, то вам нужно только ввести подсказку внутри. В настоящее время вы звоните 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();
}
0 голосов
/ 02 мая 2018

Там нет необходимости 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";
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...