Может кто-то объяснить, почему это заявление должно быть и
Так что в основном у меня возникают некоторые проблемы с пониманием логики, которая не позволяет этому выражению использовать "ИЛИ", а работать идеально, используя "И". По моей логике поговорка равна Y или y или N или n, должно работать. Но если я использую это, это бесконечный цикл. Блок кода можно увидеть ниже;
response = "empty";
while (!response.equals("Y") && !response.equals("y") && !response.equals("N") && !response.equals("n"))
{
response = stdin.next();
if (!response.equals("Y") && !response.equals("y") && !response.equals("N") && !response.equals("n")) {
System.out.println("Try again, you're still in the loop!");
}
else {
System.out.println("Congratulations you're out the loop!");
}
}
}
Может ли кто-нибудь объяснить мне логическую причину, что || нельзя использовать, но && работает отлично. Остальная часть кода (сканер и т. Д. Выше, но я не включил их, поскольку они не имеют отношения к делу). Спасибо!
4 ответа
Вы можете сделать это с помощью или:
while (!(response.equalsIgnoreCase("Y") || response.equalsIgnoreCase("N")))
поскольку
(!A && !B && !C) is equivalent to !(A || B || C)
Это называется законом де Моргана.
Кроме того, было бы лучше иметь условие только в одном месте:
response = stdin.next();
while (!(response.equalsIgnoreCase("Y") || response.equalsIgnoreCase("N")))
{
System.out.println("Try again, you're still in the loop!");
response = stdin.next();
}
System.out.println("Congratulations you're out of the loop!");
Вы можете многое сделать, чтобы улучшить этот код. Рассматривать
response = stdin.next();
while (!response.equalsIgnoreCase("y") || !response.equalsIgnoreCase("n"))
{
System.out.println("Try again, you're still in the loop!");
response = stdin.next();
}
System.out.println("Congratulations you're out the loop!");
@ Ответ Эрана объясняет, почему ваша логика неверна.
&&
Называется логический оператор И. Если оба операнда отличны от нуля, условие становится истинным.
||
Вызывается оператор логического ИЛИ. Если любой из двух операндов отличен от нуля, условие становится истинным.
Это потому, что вы хотите получить ответ не Y, ни y, ни N, ни n.
Делать ИЛИ ||
сбой логики имеет, если вы Y, вы не у, и, следовательно, ИЛИ вернет истину
||
сделает заявление быть правдой во все времена.
С X
Правда так как не было бы ни Y, ни Y, ни N, ни N True or True
или же True
или же True == True
Если вы поставите какое-либо условие (Y, y, n, N), оно даст True ИЛИ true, ИЛИ true ИЛИ false (в различном порядке) == true