尝试catch循环(InputMismatchException和ArrayIndexOutOfBoundsException之间的差异)

时间:2015-01-12 08:04:27

标签: java arrays indexoutofboundsexception inputmismatchexception

我有这段代码

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);
}
}

为什么我必须在input.next();中添加catch(InputMismatchException e);以避免无限循环?

为什么catch(ArrayIndexOutOfBoundsException e);不需要input.next();来避免无限循环?

catch(ArrayIndexOutOfBoundsException e);中,循环运行良好而input.next();为什么它与catch(InputMismatchException e);不同?

1 个答案:

答案 0 :(得分:1)

因为如果你输入一个非整数字符,int kol = input.nextInt();等待用户再次输入int,它会继续尝试阅读之前输入的字符,因为它没有消耗。

如果输入越界int消耗,下一次迭代中将读取下一个int