inputmismatchexception:进入无限循环?

时间:2016-05-18 07:22:03

标签: java

我正面对java.util.InputMismatchException;

我捕获了InputMismatchException,但我不明白为什么它在进行第一次错误输入后进入无限循环并且输出继续如下:

enter two integers 
exception caught

这会重复

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int flag = 0;
    while (flag != 1) {
        try {
            System.out.println("enter two integers");
            int a = sc.nextInt();
            int b = sc.nextInt();
            int result = a + b;
            flag = 1;
            System.out.println("ans is" + result);
        } catch (NumberFormatException e) {
            System.out.println("exception caught");
        } catch (InputMismatchException e) {
            System.out.println("exception caught");
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您需要清除缓冲区,以便在抛出异常后它对nextInt()无效。添加finally块并在其中调用sc.nextLine()

while (flag != 1) {
    try {
        System.out.println("enter two integers");
        int a = sc.nextInt();
        int b = sc.nextInt();
        int result = a + b;
        flag = 1;
        System.out.println("ans is" + result);

    } catch (NumberFormatException e) {
        System.out.println("exception caught");
    } catch (InputMismatchException e) {
        System.out.println("exception caught");
    } finally {  //Add this here
        sc.nextLine();
    }
}

工作示例:https://ideone.com/57KtFw

答案 1 :(得分:0)

如果按Enter键,则需要使用此字符

int a = sc.nextInt();
int b = sc.nextInt(); 
sc.nextLine ();

然后你可以输入

2 3 <CR>

答案 2 :(得分:0)

在您的代码中,您正在捕捉InputMisMatchException并且您只是打印一条消息,这将再次进入您的while循环。

        int a = sc.nextInt(); 
        int b = sc.nextInt();

当这些行中的任何一行抛出异常时,您的flag=1将不会被设置,并且您将处于无限循环中。纠正您的异常处理,并通过将其作为字符串读取来中断循环或清除扫描仪输入。