这有错吗?我想当 Ran1、Ran2、Ran3 都相同时退出 while 循环。 tnx
Random RandomNumber = new Random();
int Ran1 = RandomNumber.nextInt(4);
int Ran2 = RandomNumber.nextInt(4);
int Ran3 = RandomNumber.nextInt(4);
while (Ran1 != Ran2 && Ran1 != Ran3 && Ran2 != Ran3 ){
Ran1 = RandomNumber.nextInt(4);
Ran2 = RandomNumber.nextInt(4);
Ran3 = RandomNumber.nextInt(4);
System.out.print(Ran1);
System.out.print(" ");
System.out.print(Ran2);
System.out.print(" ");
System.out.println(Ran3);
}
最佳答案
这只是简单的 boolean 逻辑。你可以自己尝试一下。假设 Ran1
为 3,Ran2
为 4,Ran3
为 3。表达式的计算结果是什么?
Ran1 != Ran2 -> 3 != 4 -> True
Ran1 != Ran3 -> 3 != 3 -> False
Ran2 != Ran3 -> 4 != 3 -> True
这些并不全是 True,因此将它们AND
放在一起是 False,并且您的循环将中断。但这不是您想要的,您希望只有当它们都相同时才为 False。如果您注意到,按照您现在的方式,如果三个变量中的任何一个等于任何其他变量,循环就会中断。
从积极的角度思考比从双重否定的角度思考更容易。什么时候所有变量都相同?当 Ran1 == Ran2
、Ran1 == Ran3
和 Ran2 == Ran3
时,或者,用 Java 语法:
Ran1 == Ran2 && Ran1 == Ran3 && Ran2 == Ran3
现在,只要这不成立,您就希望循环继续,因此请确保将其括在括号中并使用 NOT
运算符 !
:
while (!(Ran1 == Ran2 && Ran1 == Ran3 && Ran2 == Ran3)) {
...
}
<小时/>
就是这样,但是如果您不想使用括号,那么您可以简单地使用 boolean 逻辑来表达表达式。 !(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
只会继续循环,只要 all三个变量对不相等。
关于java - java中while语句的三个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15490206/