2015-01-12 56 views
1

我想從用戶那裏得到一個整數輸入。我正在使用try-catch異常,因此如果輸入不是int,它會要求用戶輸入其他輸入。我寫了下面的代碼:如何在處理異常時處理輸入?

while (flag==true) {  
     try {  

      System.out.println("Enter the encryption key!"); 
      k = input.nextInt(); 
      flag = false; 
     } 
     catch (InputMismatchException ex) { 
      System.out.println("Please enter integer value!("); 


     } 
    } 

但是,當發生異常循環不斷打印

"Enter the encryption key!" 
"Please enter integer value!" 

無限,因爲掃描儀輸入不等待採取另一種輸入。

我該如何解決這個問題?

+0

你想接受異常後的整數值? –

+0

我懷疑你目前沒有收到「int」。我還假設'input'是一個'java.util.Scanner'。如果是這樣,在接收調用'input.nextInt()'之前調用'input.hasNextInt()'來避免異常。 –

+0

'while(flag == true)'應該是'while(flag)'。沒有必要像這樣檢查布爾值。 – Ascalonian

回答

1

你可以嘗試使用

input.nextLine()

因爲那等待,直到你按Enter鍵。但是如果我沒有記錯的話,你需要將它解析爲一個int。

1

您應該撥打next裏面的catch條款,這將解決問題。

docs - Scanner

當掃描器拋出InputMismatchException,掃描器不會 傳遞引起異常,這樣它可以被檢索 或通過某些其它方法跳過令牌。

沒有catch子句中有nextinput.nextInt();將繼續讀同樣的道理,加入next將消耗該令牌。

1

你應該去看看Maroun Maroun建議乾淨給我。

另一種方法是重新初始化Scanner循環。

boolean flag = false; 
     while (!flag) {  
      try {  
       input = new Scanner(System.in);//Initialize it here 
       //....