2014-09-28 142 views
0

我想從用戶輸入1或2的輸入,並且如果他不符合正確答案,則再次提示用戶輸入答案。掃描儀在while循環中,循環將不會退出

我試着用while循環做:

int players = 0; 
    players = sc.nextInt(); 

    while (players != 1 || players != 2) 
    { 
     System.out.println("Wrong input, choose again:"); 
     players = sc.nextInt(); 
     System.out.println(players); 
    } 

和DO-同時:

do 
    { 
     players = sc.nextInt(); 
    } 
    while (players != 1 || players!= 2); 

但環決不會退卻,甚至當我輸入正確的數字。

而這個邏輯用在C.

回答

2
players != 1 || players != 2 

這種情況總是如此。 ||表示or。所以表達式爲true,如果它的兩個操作數中至少有一個爲真

  • 如果玩家是1,那麼players != 2是真實的,所以整個表達式爲true
  • 如果玩家是2,那麼players != 1是真實的,所以整個表達式是真實的
  • 如果玩家是其他任何東西,那麼這兩個表達式都是真實的。

你想&&,不||

+0

該死的你是對的,謝謝! – LLL 2014-09-28 11:24:56

1

players != 1 || players!= 2與scanf的工作始終是真實的,應該是players != 1 && players!= 2。我嚴重懷疑這個錯誤的邏輯與C一起工作!

如果你對布爾代數有一點了解,你必須知道not(not(A) or not(B)) <=> A and B。在你的情況下,這意味着你的條件的否定(對於循環退出必須爲真)是players == 1 && players == 2,這是微不足道的。