Когда я запускаю этот код, он не позволяет мне вводить данные в мой сканер. Правильно ли я использую сканер?

Когда я запускаю код, я не могу ввести в сканер и продолжить код, как я хочу. Может кто-нибудь помочь мне советом? Я успешно импортировал java.util.Scanner. Кстати, я вызываю метод в оригинальной программе, я просто удалил его, прежде чем опубликовать вопрос. Я использую BlueJ.

public class Instructions extends ConsoleProgram
{
public boolean question(String prompt) {
    Scanner s = new Scanner(System.in);  
    println(prompt);
    String str = s.next();
    boolean result = true;
    while(!(str.equals("yes") || str.equals("no"))) {
        str = s.next();
        println("enter yes or no");
        }
    if (str.equals("yes")) {
    result = true;
    } else if (str.equals("no")) {
    result = false;
    }
    return result;
}

1 ответ

Решение

Правильно ли я использую сканер?

Это не проблема. Настоящая проблема - прямая ошибка в логике вашего приложения. Это условие:

  !(str.equals("yes") && str.equals("no"))

никогда не может быть false, Строка не может быть равна "yes" И равно "no" в то же время Поэтому ваш while цикл не может завершиться.


ОБНОВИТЬ

После редактирования ваш код должен более или менее работать. Но это не совсем верно.

while(!(str.equals("yes") || str.equals("no"))) {
    str = s.next();
    println("enter yes or no");
}

1) Вы читаете следующий входной токен ПРЕЖДЕ ЧЕМ вы запрашиваете его.

2) Вы не используете оставшиеся символы после первого токена строки, которую пользователь только что ввел.

Это лучше

while(!(str.equals("yes") || str.equals("no"))) {
    s.nextLine();
    println("enter yes or no");
    str = s.next();
}

Я предлагаю вам вернуться и прочитать Javadocs для Scanner класс тщательно.

Также возможно, что new Scanner(System.in) неправильно. Обычно это правильно, но ваши требования могут потребовать, чтобы вы прочитали использование ввода из другого потока ввода.

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