Когда я запускаю этот код, он не позволяет мне вводить данные в мой сканер. Правильно ли я использую сканер?
Когда я запускаю код, я не могу ввести в сканер и продолжить код, как я хочу. Может кто-нибудь помочь мне советом? Я успешно импортировал 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)
неправильно. Обычно это правильно, но ваши требования могут потребовать, чтобы вы прочитали использование ввода из другого потока ввода.