1

我有這樣的代碼嘗試捕捉

package example; 

import java.util.InputMismatchException; 
import java.util.Scanner; 

public class Example { 

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    int rep; 
    int[] arraya = new int[2]; 
    do { 
     try { 
      rep = 0; 
      System.out.print("input col :"); 
      int kol = input.nextInt(); 
      System.out.print("input value :"); 
      int val = input.nextInt(); 
      arraya[kol] = val; 
     } catch (InputMismatchException e) { 
      System.out.println("input must integer"); 
      rep = 1; 
      input.next(); 
     } catch (ArrayIndexOutOfBoundsException e) { 
      System.out.println("out of range"); 
      rep = 1; 
     } 
    } while (rep == 1); 
} 
} 

爲什麼一定要我在catch(InputMismatchException e);添加input.next();避免無限循環?

爲什麼catch(ArrayIndexOutOfBoundsException e);不需要input.next();以避免無限循環?

catch(ArrayIndexOutOfBoundsException e);,循環運行良好沒有input.next();爲什麼它不同於catch(InputMismatchException e);

+0

您不應該捕獲'ArrayIndexOutOfBoundsException'。你應該修復導致它的錯誤。 – EJP

+0

@EJP感謝您的回覆,我讓代碼知道'ArrayIndexOutOfBoundsException'和'InputMismatchException'爲什麼他們在循環中處理不同之間有什麼不同 – fikriarroisi

回答

1

因爲如果你輸入一個非整數的性格,int kol = input.nextInt();等待用戶再次輸入int,它會繼續嘗試讀,因爲它沒有被消耗掉以前輸入的字符。

如果輸入了界外int,它被消耗掉,而下int在下一次迭代讀取。

+1

@Tom我編輯了我的答案,謝謝。 – Maroun

+0

感謝您的回答 – fikriarroisi