2014-06-19 48 views
5

我一直在學習JAVA和我有一個小小的疑問代碼:爲什麼Scanner#nextInt for循環內部保持拋出異常?

class apple { 
    public static void main(String[] args) { 

     int[] num = new int[3]; 

     Scanner input = new Scanner(System.in); 
     for (int i = 0; i < num.length; i++) { 

      try { 
       num[i] = input.nextInt(); 
      } catch (Exception e) { 
       System.out 
        .println("Invalid number..assigning default value 20"); 
      num[i] = 20; 
      } 
     } 

     for (int i = 0; i < num.length; i++) { 
      System.out.println(num[i]); 
     } 
    } 
} 

我已經寫了個小程序來處理異常,如果用戶輸入不是詮釋拋出一個異常,並指定默認值。 如果我把掃描儀語句放在for循環中,它可以正常工作,但是如果我把它放在它的外部,那麼就會拋出異常的相同值,即我輸入char而不是int。 但是,如果我輸入所有整數它分配正確的值在數組中。

Scanner input = new Scanner(System.in); 

我希望你們能理解我的問題。

回答

5

Scanner#nextInt如果它不能分析整數,它不會超過輸入,所以如果你在失敗後繼續調用它,它將不斷嘗試再次解析相同的輸入,拋出InputMismatchException

你可以叫Scanner#next,忽略它返回字符串,在你catch塊跳過無效輸入:

try { 
    num[i] = input.nextInt(); 
} catch (Exception e) { 
    System.out 
      .println("Invalid number..assigning default value 20"); 
    num[i] = 20; 
    input.next(); 
} 
+0

這是你的意思,但它仍然發揚相同的值,並拋出一個異常.. 'try { num [i] = input.nextInt(); \t \t \t \t } 趕上(例外五){ 的System.out.println( 「錯誤數值請再試...。」); \t \t \t \t num [i] = input.nextInt(); }' – Nomad

+0

我添加了示例代碼,正在爲我工​​作,以我的答案。 – izstas

1
 try 
     { 
      num[i] = input.nextInt(); 
     } 
     catch(InputMismatchException ip) 
     { 
      System.out.println("Invalid number..assigning default value 20"); 
      num[i] = 20; 
      input.next(); 
     } 
+0

+1,但您應該添加一些關於_code_的解釋。 –

0

更好的代碼可以是您可以檢查是否下一個值是整數或沒有,所以你甚至不需要捕捉異常:

public static void main(String[] args) { 

    int[] num = new int[3]; 

    Scanner input = new Scanner(System.in); 

    for (int i = 0; i < num.length; i++) 
    { 
      if(input.hasNextInt()) 
      { 
        num[i] = input.nextInt(); 
      } 

      else 
      { 
       System..out.println("non integer value.. will assign it default value 20"); 
       num[i]=20; 
       input.next(); 
      } 
    } 

    for (int i = 0; i < num.length; i++) { 

     System.out.println(num[i]); 
    } 


    } 
相關問題