当前位置: 首页 > 知识库问答 >
问题:

输入不匹配异常:进入无限循环?[副本]

宋志学
2023-03-14

我面对的是java.util.InputMismatchExc0019;

我抓住InputMismatchExc0019,但我不明白为什么它会进入无限循环后,采取第一个错误的输入和输出继续这样:

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个答案

杨选
2023-03-14

在您的代码中,您捕获了InputMisMatchExc0019,您只是打印了一条消息,这将导致再次进入您的而循环。

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

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

裴存
2023-03-14

如果你按下回车键,你也需要使用这个角色

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

然后你就可以进入了

2 3 <CR>
葛雨华
2023-03-14

您需要清除缓冲区,以便在引发异常后它不会对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

 类似资料:
  • 我试图从用户那里获取输入,为2D矿山的weeper游戏构建网格,当我将有效值传递给扫描器时,过程非常顺利,但当我尝试无效的东西时,它会经历无限循环,即使try块是用资源尝试,它应该用每一个新的尝试关闭扫描器,当它无限地打印捕获上的字符串时,它听起来不会关闭它

  • (更新的代码)无论出于什么原因,InputMismatchException的catch块无法正常工作。当代码抛出此错误时,catch块不会捕获它。有人知道为什么会这样吗?

  • 我正在为一堂课做家庭作业。你必须计算这个月的工资。每次我尝试运行它时,它总是这样说:我如何修复它?线程“main”java.util.InputMismatchException中的异常 java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(扫描仪.java:1485) java.util.Scanner.ne

  • 我有这个代码,我想捕捉字母异常,但它一直有以下错误: 这是我的代码:

  • 我对Scanner有一个问题,因为它似乎采用输入值类型并强制用户下次输入值为相同类型。我找不到此代码不起作用的任何原因,并给我一个InputMismatchException,因为我已经编写了一百万次这样的代码并且没有问题。 这个问题不仅仅是register()方法的问题,而是整个程序的问题,例如下面的代码: 如果其中一种方法(如 register)要求用户输入字符串,则 int user=inp

  • 编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答问题。 (更新的代码)无论出于什么原因,InputMismatchException的catch块无法正常工作。当代码抛出此错误时,catch块不会捕获它。有人知道为什么会这样吗?