[英]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.