2011-01-18 10 views
4

プログラムでは、(関数から返された)2つのブール値をチェックしようとしています。チェックする必要のある条件は次のとおりです。
- 返された値のいずれかがtrueで他方がfalseの場合にのみ問題が発生します。
- そうでない場合は両方とも真または偽であれば、私は次のステップに進むことができます。java演算子(XORとAND/OR)で遊ぶ

状況を確認する効率的な方法はどれですか?それとも、より良い解決策がありますか?
aとbは、isCorrect関数の正当性をチェックする整数値であり、trueまたはfalseを返します。

1.

// checking for the correctness of both a and b 
if ((isCorrect(a) && !isCorrect(b)) || 
    (!isCorrect(a) && isCorrect(b))) 
{ 
    // a OR b is incorrect 
} 
else 
{ 
    // a AND b are both correct or incorrect 
} 

2.

// checking for the correctness of both a and b 
    if (! (isCorrect(a)^isCorrect(b))) 
    { 
    // a OR b is incorrect 
    } 
    else 
    { 
    // a AND b are correct or incorrect 
    } 


おかげで、
イヴァー

P.S:コードの可読性が問題ではありません。 編集:私は2番目のオプションでXORを持つことを意味しました。 また、私は==と!=オプションに同意しますが、ブール演算子を使用する必要がある場合はどうしますか?

+1

2番目の例で間違いがあるようです。 –

+0

@Nikita:確かに、閉じ括弧。 –

答えて

6
if (isCorrect(a) != isCorrect(b)) { 
    // a OR b is incorrect 
} else { 
    // a AND b are correct or incorrect 
} 
+0

+1、簡単に、ポイントに、そして同じコメントの質問と同じ順序で –

+0

これはコメントが実際に意味があったという意味ではありません;-) – Alnitak

+0

同意ですが、OPにはより簡単な時間があります。 –

6

あなたのテストはちょうどこの、ブール演算子を必要としません:

if (isCorrect(a) == isCorrect(b)) { 
    // they both have the same value 
} else { 
    // they don't ... 
} 

EDIT - 私は意図的に記述するために、コメントの主な目的があるべきことを反映するために同じコメントを使用していませんでした特定の実装ではなく、インテントである必要があります。この場合、最も単純な目的は、abの両方が同じ結果を得たことです。

2

単に:これはどのように

if (isCorrect(a) == isCorrect(b)) 
    { 
     // a AND b are both correct or incorrect 
    } else { 
     // a OR b is incorrect 

    } 
1

if(isCorrect(a) != isCorrect(b)) 
{ 
    //problem 
} 
else 
{ 
    //not a problem 
} 

あなたはブール値IMOを扱っている場合、XORでも使えますが、!=はうまく動作し、読みやすくなります。