我需要的代碼運行,直到在當兩個條件都爲真,我使用邏輯AND(& &):While循環有兩個真正的條件,但它只是驗證一個
while ((A.i != B.i) && (A.j != B.j))
{
// do something
}
在運行,循環停止,如果
A.i=B.i
沒有檢查第二個條件,我做錯了什麼?
我需要的代碼運行,直到在當兩個條件都爲真,我使用邏輯AND(& &):While循環有兩個真正的條件,但它只是驗證一個
while ((A.i != B.i) && (A.j != B.j))
{
// do something
}
在運行,循環停止,如果
A.i=B.i
沒有檢查第二個條件,我做錯了什麼?
在使用&&
運算符的條件語句中,僅在第一個條件爲true
時評估第二個條件。這就是爲什麼當A.i==B.i
你馬上打出來的支票
的「我需要的代碼運行,直到在當兩個條件都爲真」
這讓我困惑,因爲如果你想有一個while
循環運行直到一定條件true
,那麼你就不會想這些條件在while()
聲明進行評估..
如果你希望你的代碼運行UNTIL這兩方面的條件爲真,那麼它真的應該是:
// Keep running while EITHER A.i is equal to B.i OR A.j is equal to B.j
while ((A.i == B.i) || (A.j == B.j))
{
// do something
}
你翻轉他的!= ==在這裏或者這裏打破了 – BradleyDotNET
OP說他希望循環運行,直到滿足這些條件,所以他基本上說他想要循環運行,直到'Ai不等於Bi並且Aj不等於Bj',這就是循環檢查的內容。如果'Ai == Bi'或'Aj == Bj'循環將繼續 – BackDoorNoBaby
切換您&&
到||
你的循環說 「而A.I不等於B.i和A.J不等於B.j」 循環。一旦A.i等於B.i該語句不再是真的,所以循環退出(它實際上並不關心該點的第二個等式)。通過使用OR,它會循環直到兩個條件都是假的。
我看到你的點.. –
因爲愛!=碧計算結果爲false,所以沒有需要完成的條件
尚不清楚,但我懷疑這是你在找什麼
while (!(A.i == B.i && A.j == B.j))
這是一樣的
while (A.i != B.i || A.j != B.j))
我覺得呢?
OP,你的問題不是很清楚,但我敢肯定,你遇到了兩個問題之一。
這是一個非常普遍的邏輯錯誤
while (a == b) || (c == d)
相同
until (a != b) && (c != d)
同時,
while (a != b) && (c != d)
相同
until (a == b) || (c == d)
注意如何當你從==
切換到!=
,還需要切換&&
爲||
。很多開發者錯過了這種非常明顯的邏輯翻轉(參見De Morgan's Laws)。無論如何,你只需要考慮邏輯。從你的帖子,目前還不清楚你的意圖,但你可能只需要切換&&
爲||
。
短路評價
聽起來像是你想要的邏輯下半年跑,也許是因爲j
吸氣劑有你想要一些副作用(其中的方式是不是一個好主意) 。
如果您希望後半部分始終運行,則應該使用|
而不是||
。如果左側爲真,則||
操作員不會打擾右側。同樣,如果左側爲假,則&&
操作員不打擾右側。這叫做Short-circuit evaluation。
如果'A.i = B.i'則兩個條件都不成立。 –
@DourHighArch怎麼樣? – BackDoorNoBaby
因爲'A.i!= B.i'是錯誤的,所以至少有一個條件不成立。如果一個條件不成立,那麼這兩個條件都不成立。 –