誰かがこれがなぜ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であるかどうかをチェックしていることを意味します。これはfalseです。あなたはインクリメントを事前に切り替える場合
、あなたは真取得します:
if ((c2 < 3) && (row == ++c1) && ((column == c2) || (column == c2++))) {
return true;
}
ところで、あなたは単に代わりif
文の
return (c2 < 3) && (row == ++c1) && ((column == c2) || (column == c2++));
を書くことができます。
ここで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
であるから、sが作られる。これは、条件付き式の回帰の結果です。
各条件を印刷してみてください。または、デバッガを使用します。 – GhostCat
それらの大部分の '()'はまったく役に立たないことに注意してください。この条件は 'if(c2 <3 && row == c1 ++ &&(列== c2 ||列== c2 ++)){' –