gpt4 book ai didi

java - 带有 InputMismatchException 的 try/catch 创建无限循环

转载 作者:IT老高 更新时间:2023-10-28 20:45:17 24 4
gpt4 key购买 nike

所以我正在构建一个从用户输入中获取整数的程序。我有一个看起来非常简单的 try/catch block ,如果用户没有输入 int,应该重复该 block 直到他们输入。这是代码的相关部分:

import java.util.InputMismatchException;
import java.util.Scanner;


public class Except {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
boolean bError = true;
int n1 = 0, n2 = 0, nQuotient = 0;

do {
try {
System.out.println("Enter first num: ");
n1 = input.nextInt();
System.out.println("Enter second num: ");
n2 = input.nextInt();
nQuotient = n1/n2;
bError = false;
}
catch (Exception e) {
System.out.println("Error!");
}
} while (bError);

System.out.printf("%d/%d = %d",n1,n2, nQuotient);
}
}

如果我为第二个整数输入 0,那么 try/catch 会完全按照它应该做的那样做,并让我再次输入它。但是,如果我有一个 InputMismatchException,比如为其中一个数字输入 5.5,它只会在无限循环中显示我的错误消息。为什么会发生这种情况,我该怎么办? (顺便说一句,我已经尝试显式键入 InputMismatchException 作为要捕获的参数,但它并没有解决问题。

最佳答案

您需要在收到错误时调用 next();。另外建议使用 hasNextInt()

       catch (Exception e) {
System.out.println("Error!");
input.next();// Move to next other wise exception
}

在读取整数值之前,您需要确保扫描仪有一个。而且你不需要那样的异常处理。

    Scanner scanner = new Scanner(System.in);
int n1 = 0, n2 = 0;
boolean bError = true;
while (bError) {
if (scanner.hasNextInt())
n1 = scanner.nextInt();
else {
scanner.next();
continue;
}
if (scanner.hasNextInt())
n2 = scanner.nextInt();
else {
scanner.next();
continue;
}
bError = false;
}
System.out.println(n1);
System.out.println(n2);

Scanner 的 Javadoc

When a scanner throws an InputMismatchException, the scanner will not pass the token that caused the exception, so that it may be retrieved or skipped via some other method.

关于java - 带有 InputMismatchException 的 try/catch 创建无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12702076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com