これは単なるブール論理です。自分で試すことができます。Ran1
is 3、Ran2
is 4、 is 3 としましょうRan3
。式は何に評価されますか?
Ran1 != Ran2 -> 3 != 4 -> True
Ran1 != Ran3 -> 3 != 3 -> False
Ran2 != Ran3 -> 4 != 3 -> True
それらはすべて True ではないため、AND
それらを一緒にすると False になり、ループが壊れます。しかし、それはあなたが望むものではありません。それらがすべて同じである場合にのみ False になりたいのです。お気づきのように、現在の方法では、3 つの変数のいずれかが他の変数と等しい場合にループが中断されます。
二重否定ではなく、肯定的な観点から考える方が簡単です。すべての変数が同じになるのはいつですか? Ran1 == Ran2
Java 構文で、Ran1 == Ran3
、およびRan2 == Ran3
、またはの場合です。
Ran1 == Ran2 && Ran1 == Ran3 && Ran2 == Ran3
これが当てはまらない限り、ループを続行したいので、必ず括弧で囲み、NOT
演算子を使用して!
ください。
while (!(Ran1 == Ran2 && Ran1 == Ran3 && Ran2 == Ran3)) {
...
}
それだけですが、括弧を使用したくない場合は、ブール論理を使用して式を単純化できます。!(A && B)
と同じ!A || !B
です:
A | B | A && B | ! (A && B) | !A | !B | !A || !B
---+-----+----------+--------------+-----+------+-----------
T | T | T | F | F | F | F
T | F | F | T | F | T | T
F | T | F | T | T | F | T
F | F | F | T | T | T | T
!(A && B && C)
と同じであることを自分で確認できます!A || !B || !C
。while
したがって、上記のループを次のように変えることができます。
while (!(Ran1 == Ran2) || !(Ran1 == Ran3) || !(Ran2 == Ran3)) {
...
}
また:
while (Ran1 != Ran2 || Ran1 != Ran3 || Ran2 != Ran3) {
...
}
言葉で説明すると、3 つの変数のペアが等しくない限り、ループを継続する必要があります。最初の式は、3 つの変数のすべてのペアが等しくない限り、ループを継続します。Ran1 != Ran2 && Ran1 != Ran3 && Ran2 != Ran3