我面对的是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");
}
}
}
在您的代码中,您捕获了InputMisMatchExc0019
,您只是打印了一条消息,这将导致再次进入您的而循环。
int a = sc.nextInt();
int b = sc.nextInt();
当这两行中的任何一行抛出异常时,您的标志=1
将不会被设置,您将处于无限循环中。纠正您的异常处理,或者中断循环,或者通过读取字符串清除扫描仪输入。
如果你按下回车键,你也需要使用这个角色
int a = sc.nextInt();
int b = sc.nextInt();
sc.nextLine ();
然后你就可以进入了
2 3 <CR>
您需要清除缓冲区,以便在引发异常后它不会对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块不会捕获它。有人知道为什么会这样吗?