-2

有人可以向我解釋爲什麼這會返回false嗎?所有這些陳述應該是真實的,除了OR陳述之外 - 所以它應該沒問題,但是當我運行它時它會返回false。布爾運算符和括號

c1 = 2; 
c2 = 2; 
row = 3; 
column = 2; 

if ((c2 < 3) && (row == c1++) && ((column == c2) || (column == c2++))){ 
    return true; 
+2

嘗試打印每個條件。或者使用調試器。 – GhostCat

+0

請注意,絕大多數'()'根本沒有任何用處。該條件相當於if(c2 <3 && row == c1 ++ &&(column == c2 || column == c2 ++)){' –

回答

4

row == c1++是錯誤的,因爲後增量操作符返回遞增變量的前一個值。這意味着你正在檢查是否爲3 == 2,這是錯誤的。

如果切換到預增,你會得到真正:

if ((c2 < 3) && (row == ++c1) && ((column == c2) || (column == c2++))) { 
    return true; 
} 

順便說一句,你可以簡單地寫

return (c2 < 3) && (row == ++c1) && ((column == c2) || (column == c2++)); 

,而不是if聲明。

1

這裏row == c1++column == c2++,您正在使用後增量。
這意味着c1c2只有在語句執行後纔會增加。

您可以使用預增量運算符,以便增量在下一個語句之前生效。 = -

通過 row == ++c1column == ++c2

1
((c2 < 3) && (row == c1++) && ((column == c2) || (column == c2++))) 
// 1   2      3a    3b  

(1)c2 < 3 =>2 < 3 =>true

(2)row == c1++ =>3 == 2(後增量的使用和變化)更換row == c1++column == c2++ >false

沒有進一步評估由於(2)已被確定爲false,因此得到的表達式是false。這是條件表達式shorcircuiting的結果。