2013-03-19 37 views
0

這是錯誤的嗎?當Ran1,Ran2,Ran3完全相同時,我想退出while循環。 TNXJava中while語句的三個條件

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); 

}

+0

更改爲:** while(Ran1!= Ran2 || Ran1!= Ran3 || Ran2!= Ran3)** – spiritwalker 2013-03-19 01:56:44

回答

6

這僅僅是簡單的布爾邏輯。你可以自己嘗試。比方說Ran1是3,Ran2是4,Ran3是3.表達式評估的是什麼?

Ran1 != Ran2 -> 3 != 4 -> True 
Ran1 != Ran3 -> 3 != 3 -> False 
Ran2 != Ran3 -> 4 != 3 -> True 

這些都不是所有真正的,所以AND荷蘭國際集團在一起是假,和你的循環將打破。但那不是你想要的,當它們完全相同時,你只希望它是假的。如果你注意到,你現在擁有它的方式,如果三個變量中的任何一個與其他變量相等,循環就會中斷。

從積極方面而不是雙重否定方面來考慮更容易。什麼時候所有的變量都一樣?這是當Ran1 == Ran2Ran1 == Ran3Ran2 == Ran3,或在Java語法:

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 (Ran1 != Ran2 || Ran1 != Ran3 || Ran2 != Ran3) { 
    ... 
} 

在推理方面看::因此,你可以把上面的while循環到:

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

,或者您希望循環繼續,只要任何對這三個變量不等於。您的初始表達Ran1 != Ran2 && Ran1 != Ran3 && Ran2 != Ran3只會繼續循環,只要全部對的三個變量不相等

+0

Thx很多。我在編程方面是新手,你的很清楚。再次嘿嘿Tnx。 – user2184608 2013-03-19 02:19:46

+0

很高興幫助!玩得開心=) – Claudiu 2013-03-19 02:27:09

0

照理你是好的,但它可以是一個小較短/更容易閱讀。你想用在條件NOT運算符(!),因爲這是你怎麼想起來:

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

當他們**都一樣**時,他想退出循環。 – 2013-03-19 01:59:26

+0

@Legend - 啊,是的,更正了。非常感謝!:-) – Coffee 2013-03-19 02:00:56

+0

tnx很多。它現在工作。但我仍然沒有得到它。 '&&'='和'和'||' ='或'對嗎? – user2184608 2013-03-19 02:06:01

4

您想在完全相同時退出循環。由於平等是transitive,你知道如果A == B && B == C然後A == C。這意味着,你可以退出的時候

Ran1 == Ran2 && Ran1 == Ran3 

所以你必須保持在循環中,直到以前的狀態的否定爲真:

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

這相當於,通過使用De Morgan's law,到:

Ran1 != Ran2 || Ran1 != Ran3 
0

你要保持迭代,而3個值是不同的對方,所以要表達的條件的方式是

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

因爲隱含這意味着一旦你比較RAN2與其他的

BTW那然1和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);