2013-04-02 25 views
1

我正在做一個任務的程序,我必須讓用戶猜測3個鎖的數字來解鎖它。如果他們不能在3場比賽中完成比賽。很簡單,就我所知,我做得很對,所以不知道我要去哪裏錯。這裏是代碼段:猜測環卡滯Java

do{ 
    try{ 
     String g1Str = JOptionPane.showInputDialog("Enter number 1:"); 
     g1 = Integer.parseInt(g1Str); 
     looper = 2; 
    } 
    catch(NumberFormatException e){ 
     JOptionPane.showMessageDialog(null,"Not a Number"); 
     looper = 1; 
    } 
    if(g1!=num1){ 
     JOptionPane.showMessageDialog(null, "Incorrect guess, try again"); 
     lives = lives - 1; 
     looper = 1; 
    } 
    else if(g1==num1){ 
     JOptionPane.showMessageDialog(null, "Correct!"); 
     looper = 2; 
    } 
}while(looper==1||lives!=0); 

這是我的想法:要求用戶輸入數字,嘗試將字符串轉換爲整數。我使用try catch來確保用戶確實輸入了一個數字而不是一個字母。之後,我看到猜測是否等於實數。如果沒有,你會放棄生命(早些時候宣佈生命爲3),然後將looper設置爲1,這樣你就可以嘗試再次猜測自己是否有足夠的生命。如果它的權利,活套被設置爲2,並且循環被打破,此時用戶可以猜測第二個數字。我只希望循環保持活躍狀態​​,只要你有足夠的生命,所以我將「while」語句設置爲當looper爲1時,或者當生命不等於0時。但是,如果不打破循環if生活下去0。在此先感謝

回答

7

你需要改變你的while循環的邏輯:眼下

while (looper == 1 && lives != 0)

,如果你有更多的生命,它會不斷循環,無事實上活套是什麼。

+1

@DoanCuong爲什麼這是一個更好的解決方案? – Pete

+0

對不起,我沒有,雖然它通過 –

+0

好吧,我現在看到什麼是錯誤的,我是在假設或者意味着,如果他們中的任何一個是錯誤的會打破。現在修復了,我在其他循環的開頭添加了「if(lives == 0){looper = 2}」。謝謝 – Dave555

0

替換此

if(g1!=num1){ 
     JOptionPane.showMessageDialog(null, "Incorrect guess, try again"); 
     lives = lives - 1; 
     looper = 1; 
    } 

通過這個

if(g1!=num1){ 
    JOptionPane.showMessageDialog(null, "Incorrect guess, try again"); 
    lives = lives - 1; 
    if(lives == 0) 
    { 
     looper = 2; 
    } 
    else 
    { 
     looper = 1; 
    } 

} 

因爲當你lives達到0.1 looper仍然等於1,因此該循環繼續

1

你想布爾值和&&,而不是OR ||,如下所示:

while(looper==1 && lives!=0); 

||計算爲true如果它的參數一方是真實的,所以如果looper1你會堅持下去的東西,不管是什麼lives是。同樣,如果lives不是0,即使您將looper設置爲2,您的代碼也將保持循環。

&&將評估爲true只有兩個條件都爲真,並會給false並退出循環,如果任一looper不是1lives0