java中while语句中的三个条件

0 java boolean-logic while-loop

这是错的吗?当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);
Run Code Online (Sandbox Code Playgroud)

}

Cla*_*diu 6

这只是简单的布尔逻辑.你可以自己试试.让我们说Ran1是3,Ran2是4,并且Ran3是3.表达式将评估什么?

Ran1 != Ran2 -> 3 != 4 -> True
Ran1 != Ran3 -> 3 != 3 -> False
Ran2 != Ran3 -> 4 != 3 -> True
Run Code Online (Sandbox Code Playgroud)

那些都不是真的,所以AND把它们放在一起是假的,你的循环会破裂.但那并不是你想要的,你希望它们只有在它们完全相同时才是假的.如果您注意到现在的方式,如果三个变量中的任何一个等于任何其他变量,则循环中断.

用积极而不是双重否定来思考更容易.什么时候变量都一样?它是何时Ran1 == Ran2,Ran1 == Ran3Ran2 == Ran3,或者,在Java语法中:

Ran1 == Ran2 && Ran1 == Ran3 && Ran2 == Ran3
Run Code Online (Sandbox Code Playgroud)

现在,只要不是这样,您希望循环继续,因此请确保将其包装在括号中并使用NOT运算符!:

while (!(Ran1 == Ran2 && Ran1 == Ran3 && Ran2 == Ran3)) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

就是这样,但如果您不想使用括号,那么您可以使用布尔逻辑简单地表达式.!(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
Run Code Online (Sandbox Code Playgroud)

您可以自己验证与之!(A && B && C)相同的内容!A || !B || !C.因此,您可以将上面的while循环转换为:

while (!(Ran1 == Ran2) || !(Ran1 == Ran3) || !(Ran2 == Ran3)) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

要么:

while (Ran1 != Ran2 || Ran1 != Ran3 || Ran2 != Ran3) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

在用词语推理它时:只要三个变量中的任何一对不相等,你就希望循环继续.Ran1 != Ran2 && Ran1 != Ran3 && Ran2 != Ran3只要三个变量的所有对都不相等,您的初始表达式将只继续循环.