2013-07-01 159 views
1

我有一個非工作的do-while循環。當我輸入字符串而不是int時,它應該說「bla」並再次要求插入一個數字,但是它會一遍又一遍地發送消息文本。這段代碼有什麼問題?爲什麼我有一個永無止境的do-while循環?

boolean i = true; 
    do { 
     i = false; 

     try { 
      System.out.println("insert number"); 
      int k = sc.nextInt(); 
     } 
     catch(InputMismatchException e) { 
      System.out.println("test"); 
      i = true; 
     } 
    } while (i== true); 
+3

請參閱http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html:'當掃描器拋出InputMismatchException時,掃描器不會傳遞導致異常的令牌,以便通過其他方法檢索或跳過它。所以,當你得到一個'InputMismatchException'時,你需要跳過這個標記。 –

回答

7

你需要做的sc.nextLine()catch塊來清除錯誤的輸入。調用nextInt()會將輸入留在緩衝區中,前提是它與int模式不匹配。

+0

真的有幫助:D非常感謝你!這是一個棘手的問題。 –

+2

提示:*我*已經是一個布爾值,所以你不需要(我==真)。改用while(i)。 – Fernando

相關問題