有人可以向我解釋爲什麼這會返回false嗎?所有這些陳述應該是真實的,除了OR
陳述之外 - 所以它應該沒問題,但是當我運行它時它會返回false。布爾運算符和括號
c1 = 2;
c2 = 2;
row = 3;
column = 2;
if ((c2 < 3) && (row == c1++) && ((column == c2) || (column == c2++))){
return true;
有人可以向我解釋爲什麼這會返回false嗎?所有這些陳述應該是真實的,除了OR
陳述之外 - 所以它應該沒問題,但是當我運行它時它會返回false。布爾運算符和括號
c1 = 2;
c2 = 2;
row = 3;
column = 2;
if ((c2 < 3) && (row == c1++) && ((column == c2) || (column == c2++))){
return true;
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
聲明。
這裏row == c1++
和column == c2++
,您正在使用後增量。
這意味着c1
和c2
只有在語句執行後纔會增加。
您可以使用預增量運算符,以便增量在下一個語句之前生效。 = -
通過 row == ++c1
和column == ++c2
((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的結果。
嘗試打印每個條件。或者使用調試器。 – GhostCat
請注意,絕大多數'()'根本沒有任何用處。該條件相當於if(c2 <3 && row == c1 ++ &&(column == c2 || column == c2 ++)){' –