繁体   English   中英

同时循环测试条件

[英]While loop testing condition

我正在尝试执行while循环,直到用户输入Yes或No.

为什么测试函数中没有OR而不是AND?

使用OR时,它可以是yesno

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM