1

関数の 1 つにこのようなものがあり、false を返します。

if ((X = ax && Y == ay) || (X == bx && Y == ay) || (X == cx && Y == ay) || (X == ax && Y == by) || (X == cx && Y == by) || (X == ax && Y == cy) || (X == bx && Y == cy) || (X == cx && Y == cy))
    return true;
else
    return false;

ただし、同じパラメーターで関数を呼び出しても、コードをこれだけに変更すると、true が返されます。

if (X == bx && Y == ay)
    return true;
else
    return false;

なぜこうなった?2 番目のコードの条件は最初のコードの条件の 1 つなので、それらのいずれかが true の場合、true を返す必要があります。よろしいですか? 最初の条件が true を返すことを期待しています

4

3 に答える 3

5

長い条件の最初のすぐ近くにある「=」は、「==」である必要があります。X をテストするだけでなく、新しい値を X に割り当てているため、他のすべてのテストが失敗します。

于 2013-03-17T15:40:07.007 に答える
4

=は代入演算子です。誤って比較に使用するのはよくある間違いですが、これもあなたの場合です。条件の最初の部分:に割り当てること(X = ax && Y == ay)での値を変更します。これは、残りの条件の結果に影響します。Xax

また、次の点にも注意してください。

if (A || B || C || D)
    return true;
else
    return false;

等しい:

return (A || B || C || D);
于 2013-03-17T15:42:47.533 に答える
3
if((X = ax && Y == ay) ||  //Problem is here

あなたはそれを作る必要があります

if((X == ax && Y == ay) || 

コードはX= bxY=で失敗してayいます。最初のケースのように、値はにax割り当てられます。その後のすべての比較は false と評価され、最初のテストは失敗します。XTRUEYay

于 2013-03-17T15:40:43.667 に答える