[英]While loop testing condition
我正在尝试执行while循环,直到用户输入Yes或No.
为什么测试函数中没有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!");
因为!answer.equals("yes") && !answer.equals("no")
基本上说虽然answer
不是“是”而answer
不是“不”。
为了使它成为OR你可以这样做:
while(!(answer.equals("yes") || answer.equals("no")))
{
}
这意味着,虽然以下条件不属实; 条件: answer
是“是”或answer
是“否”
while (!answer.equals("yes") && !answer.equals("no"))
表示当条件变为false时循环终止。 根据de Morgan定律, !(!answer.equals("yes") && !answer.equals("no"))
是answer.equals("yes") || answer.equals("no")
answer.equals("yes") || answer.equals("no")
。 也就是说,当答案要么是 “是”或“否”的循环终止-这正是你想要的。
如果您将&&
更改为||
,当答案同时为 “是”和“否”时,循环将终止,这是不可能的。
如果使用短路或/和(||和&&),系统不会评估整个表达式(如果不需要)。 因此,如果用户输入“no”,则检查它是否为“yes”的第一部分的计算结果为true。 由于一个或条件只需要一个true来评估为true,因此它不会评估任何其他内容而只返回。
你需要&&,因为你说的是答案是肯定的,而不是不再要求输入。 以下是短路布尔运算符: https : //users.drew.edu/bburd/JavaForDummies4/ShortCircuitEval.pdf 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.