В то время как цикл тестирования условия - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь выполнить цикл while, пока пользователь не введет Да или Нет.

Почему в функции тестирования не может быть ИЛИ вместо И?

При использовании ИЛИ, это может быть либо yes или no.

System.out.print("Enter yes or no: ");
String answer = input.getNext();
while (!answer.equals("yes") && !answer.equals("no")) {
    System.out.println("Enter ONLY yes or no, please: ");
    answer = input.getNext();
}
System.out.println("Thank you!");

Ответы [ 3 ]

0 голосов
/ 05 мая 2019

while (!answer.equals("yes") && !answer.equals("no")) означает, что цикл завершается, когда условие становится ложным. Согласно законам де Моргана, !(!answer.equals("yes") && !answer.equals("no")) равно answer.equals("yes") || answer.equals("no"). То есть цикл завершается, когда ответом является или"да" или "нет" - это именно то, что вы хотите.

Если вы измените && на ||, цикл прекратится, когда ответом будет и"да" и "нет" одновременно, что невозможно.

0 голосов
/ 05 мая 2019

Если вы используете короткое замыкание или / и (|| и &&), система не оценивает все выражение, если это не нужно. Поэтому, если пользователь вводит «нет», первая часть, которая проверяет, не является ли это «да», оценивается как истина. Поскольку условию or требуется только одно значение true, чтобы оценить значение true, оно ничего не оценивает и просто возвращает.

Вам нужно &&, потому что вы говорите, что если ответ не положительный и нет, попросите ввести еще раз. Подробнее о логических операторах короткого замыкания: https://users.drew.edu/bburd/JavaForDummies4/ShortCircuitEval.pdf.

0 голосов
/ 05 мая 2019

Потому что !answer.equals("yes") && !answer.equals("no") в основном говорит, хотя answer не "да", а answer не "нет".

Чтобы сделать это ИЛИ, вы можете сделать это следующим образом:

while(!(answer.equals("yes") || answer.equals("no")))
{
}

Что означает, хотя следующее условие неверно; условие: answer это "да" или answer это "нет"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...