-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 ++ &&(列== c2 ||列== c2 ++)){' –

答えて

4

row == c1++ポストインクリメント演算子をインクリメント変数の以前の値を返すので、偽です。これは、3 == 2であるかどうかをチェックしていることを意味します。これはfalseです。あなたはインクリメントを事前に切り替える場合

、あなたは真取得します:

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

ところで、あなたは単に代わりif文の

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

を書くことができます。

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であるから、sが作られる。これは、条件付き式の回帰の結果です。