2011-11-01 92 views
0

好了,這裏是我的代碼:循環'忽略'輸入?

public static void playAgain(Scanner in){ 
    System.out.print("Play again?: "); 
    String again=in.next(); 
    if (again.equalsIgnoreCase("y")){ 
     playerScore=0; 
     aiScore=0; 
     playAgain=true; 
     } 
    else if (again.equalsIgnoreCase("n")){ 
     playAgain=false; 
     } 
    else { 
     while (!again.equalsIgnoreCase("y") && !again.equalsIgnoreCase("n")){ 
      System.out.print("Invalid response. Please enter \"y\" or \"n\": "); 
      again=in.next(); 
      } 
     } 
    } 

出於某種原因,如果我輸入了錯誤的變量,說「布格」,while循環打印錯誤信息,但由於某種原因,默認爲「Y」,甚至如果我輸入'n' - 例如,樣品運行將是:

再次播放? boog

輸入無效,請輸入y或n。 ñ

-program儘管我輸入正

我該如何解決這個問題再次扮演?這與訂單有關嗎?提前致謝!

+0

你的代碼說'無效response',但屏幕的協議說,'無效input'這並不匹配。 。除此之外,我會直接使用'return playAgain'方法,而不是將它保存到一個字段變量中。一個類中的字段越少,就越容易理解。 –

+0

如果你想要一個替代方法,我編輯了我的答案 – AusCBloke

回答

3

這可能是因爲您退出while循環後沒有將playAgain設置爲false。以前的值是playAgaintrue

我認爲你需要考慮重構,以便while循環高於'y'和'n'if/else聲明。這樣一旦用戶輸入了一個有效值,總是會調用if/else。驗證應該在方法的開始。

3

在最後else分支,從while循環獲得有效的輸入後,您沒有設置playAgain變量,因此它保持whixhever看重它了 - 在這種情況下正確的。您必須根據輸入進行設置。

4

我猜你正在使用一些全局變量playAgain來指示是否再次播放。我已經回到從功能的boolean但無論如何,我不認爲playAgain被修改在最後else塊:

else { 
     while (!again.equalsIgnoreCase("y") && !again.equalsIgnoreCase("n")){ 
      System.out.print("Invalid response. Please enter \"y\" or \"n\": "); 
      again=in.next(); 
      } 
     } 

也許你想在一個while循環整套if S,所以again會在包含「y」或「n」後處理?無論哪種方式,該功能的結構需要重新思考。

編輯:我的做法是沿着線的東西:

public static boolean playAgain(Scanner in){ 
    System.out.print("Play again?: "); 
    String again=in.next(); 

    while (!again.equalsIgnoreCase("y") && !again.equalsIgnoreCase("n")) { 
     System.out.print("Invalid response. Please enter \"y\" or \"n\": "); 
     again = in.next(); 
    } 

    if (again.equalsIgnoreCase("y")){ 
     playerScore = 0; 
     aiScore = 0; 
     return true; 
    } 

    // there are only two valid options, so to get here it must be "n" 
    return false; 
} 
+0

我有一個類似的問題,並通過谷歌發現這一點。謝謝@AusCBloke。+1 – IRGeekSauce

0

我所看到的,你的程序是有缺陷的。

  1. if-else應該在另一個while循環中(例如無限循環或在again ==n的情況下退出)。所以每次你輸入scanner.next()元素時,再次播放邏輯將被執行。這裏
  2. while循環執行的代碼和工作正常,因爲ü沒有得到警告「無效的輸入,請輸入y或n。」再次。

所以again的值是「n」,因此邏輯退出了while循環。所以檢查playAgain是否設置爲true

0

不良流量。 你應該做這樣的事情(對任何錯誤對不起,這是精心輸入我的手機上:

public static void playAgain(Scanner in){ 
    System.out.print("Play again?: "); 
     while (true) { 
     String again=in.next(); 
     if (again.equalsIgnoreCase("y")){ 
      playerScore=0; 
      aiScore=0; 
      playAgain=true; 
       break; 
     } else if (again.equalsIgnoreCase("n")){ 
      playAgain=false; 
      break; 
     } else { 
      // bad input, so allow to loop again 
      System.out.print("Invalid input! Please enter y or n"); 
     } 
     } 
} 
+0

啊廢話它刪除了我的換行符...對不起,關於該 – jli

+1

修復它爲你交配...儘快因爲有人批准我噸。 – AusCBloke

+0

謝謝。 *希望我買了一個帶有硬鍵盤的手機* – jli