#java #loops #do-while
#java #циклы #do-while
Вопрос:
Я должен написать программу Magic 8 ball, которая будет учитывать ошибки пользовательского ввода, и я должен использовать цикл для этого.
boolean okay;
do {
System.out.printf("What is your question?n");
questionStr = keyboard.nextLine();
int length = questionStr.length();
if (questionStr.length() == 0) {
System.out.println("Not allowed.");
okay = false;
} else if (!(questionStr.charAt(length - 1) == '?')) {
System.out.println("Add question mark.");
okay = false;
} else if (questionStr.length() > 60) {
okay = false;
}
okay = true;
} while (!okay);
Когда я запускаю код и превращаю его в пустую строку, он выводит «не разрешено», однако он по-прежнему выполняет остальную часть кода и не выполняет обратный цикл и не спрашивает «В чем ваш вопрос?» То же самое происходит с вопросительным знаком; он выводит «Добавить вопросительный знак», но не выполняет обратный цикл, как предполагалось. Если я задаю вопрос длиной более 60 символов, код все равно выполняется и не возвращается к циклу и продолжает спрашивать пользователя «Какой у вас вопрос?» пока код не станет меньше 60 символов. Я пытаюсь выяснить, что я здесь делаю не так.
Комментарии:
1. Добавьте
else
передokay = true;
.2. Элементарная отладка выявила бы проблему с установкой
okay
наtrue
в любом случае в первую минуту. На самом деле это не онлайн-отладчик3. Добро пожаловать в Stack Overflow! Похоже, вам нужно научиться использовать отладчик. Пожалуйста, помогите себе с некоторыми дополнительными методами отладки . Если после этого у вас все еще будут проблемы, пожалуйста, не стесняйтесь возвращаться с более подробной информацией.
Ответ №1:
Переместите okay = true;
перед вашими if
утверждениями, которые это отрицают,
okay = true;
if (questionStr.length() == 0) {
System.out.println("Not allowed.");
okay = false;
} else if (!(questionStr.charAt(length - 1) == '?')) {
System.out.println("Add question mark.");
okay = false;
} else if (questionStr.length() > 60) {
okay = false;
}
Как указано, вы безоговорочно устанавливаете okay
значение true
перед своим условием while (!okay);
, и, таким образом, цикл всегда заканчивается.