这只是简单的布尔逻辑。你可以自己试试。假设Ran1
是 3、Ran2
是 4 和Ran3
是 3。表达式的计算结果是什么?
Ran1 != Ran2 -> 3 != 4 -> True
Ran1 != Ran3 -> 3 != 3 -> False
Ran2 != Ran3 -> 4 != 3 -> True
这些并不都是真的,所以AND
把它们放在一起是假的,你的循环会中断。但这不是您想要的,您希望它仅在它们都相同时为 False。如果您注意到,按照您现在的方式,如果三个变量中的任何一个等于其他任何一个,循环就会中断。
从正面而不是双重否定的角度思考更容易。什么时候所有变量都相同?在 Java 语法中是 when Ran1 == Ran2
, Ran1 == Ran3
, and Ran2 == Ran3
, or :
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) {
...
}
就用文字进行推理而言:只要三个变量中的任何一对不相等,您就希望循环继续。Ran1 != Ran2 && Ran1 != Ran3 && Ran2 != Ran3
只要三个变量的所有对不相等,您的初始表达式只会继续循环。