簡體   English   中英

帶有NOT .equalsIgnoreCase()的JAVA循環邏輯錯誤

[英]JAVA looping logic error with NOT .equalsIgnoreCase()

我正在嘗試在while循環中使用equalsIgnoreCase()來嘗試檢查是否使用NOT(!)運算符編寫了非預期的內容。 例如:

String temp="A";
boolean x =(!temp.equalsIgnoreCase("a")) ;

看,這與while循環一起使用。 如果不是A,它將繼續循環,但下一行不會

boolean x =(!temp.equalsIgnoreCase("a") || !temp.equalsIgnoreCase("b")) ;

這似乎不再起作用。 無論您鍵入什么,即使它是a或b,都將返回true。 因此,當我使用整行代碼來檢查未使用的任何字母時:

while (!temp.equalsIgnoreCase("A") || !(temp.equalsIgnoreCase("B")) ||!temp.equalsIgnoreCase("D")|| !temp.equalsIgnoreCase("P") || !temp.equalsIgnoreCase("S"))
{ ***Do Code***}

即使輸入的內容等於其中一個字母,它也會循環播放。

如果有多個!temp.equalsIngnoreCase,則該代碼不適用於OR(||)。

使它起作用的唯一方法是將OR更改為AND

while (!temp.equalsIgnoreCase("A") && !(temp.equalsIgnoreCase("B")) && !temp.equalsIgnoreCase("D")&& !temp.equalsIgnoreCase("P") && !temp.equalsIgnoreCase("S"))

即使我似乎已經找到了解決方案,但我仍然不明白為什么OR無效,而AND有效。 我刪除了NOT來查看是否一切正常,並且當輸入其中一個字母時它似乎完美地循環了。

即使輸入的內容等於其中一個字母,它也會循環播放。

是的,當然可以。

您要求它在不是A 不是B 好吧 AB都不能... ...如果值等於B那么它將不等於A因此第一個操作數將使循環繼續進行。 如果該值等於A那么它將不等於B因此第二個操作數將使循環繼續進行。

你要改變的解決方案,是正確的-你想要的值不是A 不是B (也就是說,它的A B都)。

另外,您可以在內部使用OR,但在整個過程中使用NOT:

while (! (temp.equalsIgnoredCase("A") || temp.equalsIgnoreCase("B") || ...))

我仍然不明白為什么OR無效,而AND無效

使用||的表達式 在任何給定的temp值下,它將始終為true 因為, temp不能同時為ab 如果是a ,則||的第二部分 將為true ,如果等於b或任何其他值,則第一部分將為true ,因此在兩種情況下都使整個表達式為true

使用&& ,只有當temp既不是a也不是b ,您的while才會true

另外,如果要針對多個值測試溫度 ,則可以將while條件更改為更簡單:

while (!"ABDPS".contains(temp.toUpperCase())) {

}

這是犯規邏輯。 編碼

(!temp.equalsIgnoreCase("A") || !(temp.equalsIgnoreCase("B")) ||!temp.equalsIgnoreCase("D")|| !temp.equalsIgnoreCase("P") || !temp.equalsIgnoreCase("S"))

手段

如果char不是A,不是B,不是D,不是P或不是S。它將始終為true,因為char是A,所以它既不是B,D,S也不是P。其他。

如果您希望它是OR邏輯,則應為:

(!(temp.equalsIgnoreCase("A") || (temp.equalsIgnoreCase("B")) ||temp.equalsIgnoreCase("D")|| temp.equalsIgnoreCase("P") || temp.equalsIgnoreCase("S")))

這意味着,不是當char是A,B,D,S或P時

這都是關於邏輯的。

OR B表示當A為true或B為true或兩者都為true時為true。

在您的特殊情況下,equalsIgnorecase()之一只能正常工作,因此您編寫了類似重言式的語句,這意味着無休止的循環。 您可以在此處閱讀有關布爾代數的信息: http : //en.wikipedia.org/wiki/Boolean_algebra_%28structure%29

有點理論,但它解釋了編寫布爾表達式時需要了解的內容。 希望這可以幫助 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM