我正在尝试执行while循环,直到用户输入是或否。
为什么测试功能中不能有OR而不是AND?
使用OR时,它可以是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!");
答案 0 :(得分:0)
因为status
基本上说redirect
不是“ yes”而!answer.equals("yes") && !answer.equals("no")
不是“ no”。
要使其成为“或”,您可以执行以下操作:
answer
这意味着,当以下条件不成立时;条件:answer
为“是”或while(!(answer.equals("yes") || answer.equals("no")))
{
}
为“否”
答案 1 :(得分:0)
while (!answer.equals("yes") && !answer.equals("no"))
表示条件变为假时循环终止。根据de Morgan法律,!(!answer.equals("yes") && !answer.equals("no"))
是answer.equals("yes") || answer.equals("no")
。也就是说,当答案是 是或否时,循环终止-这正是您想要的。
如果将&&
更改为||
,则当答案同时为“是”和“否”时,循环将终止,这是不可能的。
答案 2 :(得分:0)
如果使用短路或/和(||和&&),则系统不必评估整个表达式(如果不需要)。因此,如果用户输入“否”,则检查其是否为“是”的第一部分将评估为true。由于or条件只需要一个true即可评估为true,因此不会评估其他任何东西,只会返回。
您需要&&,因为您在说答案是否是,不是,则再次要求输入。以下是有关短路布尔运算符的更多信息:https://users.drew.edu/bburd/JavaForDummies4/ShortCircuitEval.pdf。