java中while语句的三个条件

java中while语句的三个条件,java,while-loop,boolean-logic,Java,While Loop,Boolean Logic,这是错的吗?当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 !=

这是错的吗?当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);

}

从逻辑上讲,您的内容还可以,但可以稍微短一点/更容易阅读。您想使用NOT运算符!在这种情况下,因为你就是这么想的:

while ( !  ( ( Ran1 == Ran2) && (Ran1 == Ran3) ) )

这只是简单的布尔逻辑。你可以自己试试。假设Ran1是3,Ran2是4,Ran3是3。表达式的计算结果是什么

Ran1 != Ran2 -> 3 != 4 -> True
Ran1 != Ran3 -> 3 != 3 -> False
Ran2 != Ran3 -> 4 != 3 -> True
这些都不是真的,所以把它们放在一起是假的,你的循环就会中断。但那不是你想要的,你只希望它们都是一样的时候才是假的。如果你注意到,按照现在的方式,如果三个变量中的任何一个等于任何其他变量,循环就会中断

从积极的角度思考比从双重消极的角度思考更容易。什么时候所有的变量都一样?当Ran1==Ran2、Ran1==Ran3和Ran2==Ran3时,或者在Java语法中:

Ran1 == Ran2 && Ran1 == Ran3 && Ran2 == Ran3
现在,只要这不是真的,您就希望循环继续,因此请确保将其括在括号中并使用not运算符!:

就是这样,但是如果你不想使用括号,那么你可以简单地使用布尔逻辑的表达式!A&&B与相同!A | | |!B:

你可以自己验证一下!A&&B&&C与相同!A | | |!B | |!C.因此,您可以将上述while循环转换为:

while (!(Ran1 == Ran2) || !(Ran1 == Ran3) || !(Ran2 == Ran3)) {
    ...
}
或:


在用文字进行推理时:只要三个变量中的任何一对不相等,就希望循环继续。您的初始表达式Ran1!=Ran2和Ran1!=Ran3和Ran2!=Ran3只会继续循环,只要三个变量的所有对都不相等。

当它们都相同时,您希望退出循环。因为相等是,所以您知道如果A==B&&B==C,那么A==C。这意味着您可以在

Ran1 == Ran2 && Ran1 == Ran3
因此,必须保持在循环内,直到前一个条件的否定为真:

! (Ran1 == Ran2 && Ran1 == Ran3)
通过使用,这相当于:


您希望在3个值彼此不同时继续迭代,因此表示条件的方法是

while(Ran1 != Ran2 || Ran2 != Ran3 )
因为这意味着,一旦将Ran2和其他Ran2进行比较,Ran1和Ran3就相等了

顺便说一句,你可以简化你的工作

System.out.print(Ran1);
System.out.print(" ");
System.out.print(Ran2);
System.out.print(" ");
System.out.println(Ran3);
通过使用单个:

System.out.println(Ran1 + " " Ran2 + " " + Ran3);

将其更改为:whileRan1!=Ran2 | | Ran1!=Ran3 | | Ran2!=Ran3He希望在它们都相同时退出循环。tnx很多。它现在起作用了。但我还是不明白。“&&”和“and”| |或“right”这两个词有很多含义。我是编程新手,你的想法很清楚。呵呵,又是Tnx。
Ran1 != Ran2 || Ran1 != Ran3
while(Ran1 != Ran2 || Ran2 != Ran3 )
System.out.print(Ran1);
System.out.print(" ");
System.out.print(Ran2);
System.out.print(" ");
System.out.println(Ran3);
System.out.println(Ran1 + " " Ran2 + " " + Ran3);