2017-04-23 64 views
-2
import java.util.InputMismatchException; import java.util.Scanner; 

public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     boolean nvalid = true; // boolean to get out of do while when user input number 
     int a = 0; 
     System.out.println("enter number a"); 
     do { 
      try { 
       a = sc.nextInt(); 
       nvalid = true; 
      } catch (InputMismatchException e) { 
       System.out.println("please enter number only"); 
       nvalid = false; //make the boolean false so do while will let user enter number again. 
      } 
     } while (nvalid == false); 
     System.out.println("out of do while"); 
    } 

嗨,我正在使用netbeans練習java異常,我想捕捉異常,當用戶不輸入數字。捕捉異常(char到int)導致循環無限

上面的代碼會導致無限循環,並阻止用戶爲變量a輸入值。

回答

3

那麼你是成功捕捉異常。這不是問題。

真正的問題是由於發生了什麼而導致發生異常。如果nextInt()無法解析整數,它會放回它所查看的所有字符。

因此......當它再次繞過循環時,您的代碼嘗試讀取與以前完全相同的字符。這將失敗,並失敗,並失敗...

解決方案:使用nextLine()跳過「壞的輸入」,然後要求用戶再試一次。你可以把它放在異常的catch塊中。


注意,這是一個壞主意/壞習慣:

.... while (nvalid == false); 

你不應該使用==測試一個布爾值是真還是假。代之以:

.... while (!nvalid); 
+0

「break」可以進一步簡化這一點。 – pvg

+0

這是真的。然而,我將重點放在我認爲對於Nhan學習這件事最重要的事情上。 –

+0

他不應該主要學習做研究嗎?他顯然沒有。 – Tom