我正面对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");
}
}
}
答案 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();
}
}
答案 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
将不会被设置,并且您将处于无限循环中。纠正您的异常处理,并通过将其作为字符串读取来中断循环或清除扫描仪输入。