java - 关于循环内异常(try-catch)的问题

标签 java exception try-catch

我在其他项目中也遇到过几次这个问题。现在我尝试了解异常处理,但我仍然不知道它到底是如何工作的。 我尝试用循环编写一个计算器,当我尝试输入一个字符串时,会出现InputMismatchException - 我试图捕获它,但由于某种原因,在catch子句之后,java给了我另一个InputMismatchException,为什么?

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

public class Calculator {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int loop = 1;
        while (loop == 1) {

            try {

                System.out.println("First number:");
                int num1 = scanner.nextInt();
                System.out.println("Second number:");
                int num2 = scanner.nextInt();

                System.out.println("Choose operator (1 for +)(2 for -)(3 for *)(4 for /): ");

                int userInput = scanner.nextInt();

                switch (userInput) {
                case 1:
                    System.out.println("Result: " + num1 + " + " + num2 + " = " + (num1 + num2));
                    break;
                case 2:
                    System.out.println("Result: " + num1 + " - " + num2 + " = " + (num1 - num2));
                    break;
                case 3:
                    System.out.println("Result: " + num1 + " * " + num2 + " = " + (num1 * num2));
                    break;
                case 4:
                    System.out.println("Result: " + num1 + " / " + num2 + " = " + (num1 / num2));
                    break;
                default:
                    System.out.println("Invalid Input!");

                }

                System.out.println("Repeat? (1 = yes)(0 = nein)");

                loop = scanner.nextInt();

            } catch (InputMismatchException e) {
                System.out.println("Invalid Input, try again!");
                scanner.nextInt();

            }

        }
        scanner.close();
        System.out.println("Ciao!");

    }

}

起初有一个无限循环,我通过 catch block 中的 scanner.nextInt(); 解决了这个问题,但我仍然收到此错误:

Choose operator (1 for +)(2 for -)(3 for *)(4 for /): 
er
Invalid Input, try again!
Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at java.util.Scanner.nextInt(Unknown Source)
    at Calculator.main(Calculator.java:47)

为什么?

最佳答案

可能是因为您没有获取 nextInt,因为下一个值不是 int。因此,您尝试在 catch block 中再次获取相同的输入,从而再次出现 InputMismatchException。

您的 Stacktrace 还指向您尝试检索下一个 int 的 catch 子句!

我建议您将 catch 子句中的 nextInt 替换为 nextLine:

...
catch (InputMismatchException e) {
    System.out.println("Invalid Input, try again!");
    scanner.nextLine();
}

然后您将再次开始循环并尝试重新阅读。

还结帐this stackoverflow 或 tutorialspoint examples for using the Scanner class 上的类似线程.

关于java - 关于循环内异常(try-catch)的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58816560/

相关文章:

java - NATS 持久消息 Java 客户端

java - Facebook 黑莓 SDK 错误 500

java - SeekBar 设置 Max 和设置 Progress 的空指针异常

c# - Windows.Forms Application.Run() 中无法追踪的异常

python - Python 中的华氏度转换器,使用 try/except 命令排除字母

php - 如何捕获此错误 : "Notice: Undefined offset: 0"

Java/MySQL 结果集中途出现空指针异常

java - 如何以用户身份登录Java类(class)注册系统

c++ - WINAPI SetLastError 与 C++ Keword 抛出

c++ - 从构造函数中捕获异常意味着我的实例之后超出了范围