InputMismatchException 根本没有被捕获

InputMismatchException not being caught at all

我正在尝试制作一个计算器,人们可以根据数字做出不同的选择。

当我输入一个不是 int 的选择时,它会抛出 InputMismatchException,但由于某种原因它不会被捕获。

这是我目前的代码:

import java.util.*;

public class calculator {
    public static void main(String[] args) {
        boolean run = true;
        Scanner in = new Scanner(System.in);
        int choice;
        while (run) {
            System.out.println("Bem-vindo a calculadora! Escolha uma das opções abaixo!");
            System.out.println("1. Conversor binario");
            System.out.println("2. Conversor octal");
            System.out.println("3. Conversor decimal");
            System.out.println("4. Conversor hexadecimal");
            System.out.println("5. Calculadora de binario");
            System.out.println("6. Calculadora de octal");
            System.out.println("7. Calculadora normal");
            System.out.println("8. Calculadora de hexadecimal");
            System.out.println("9. Sair");
            try {
                System.out.println("Enter a number");
                choice = in.nextInt();
            } catch (Exception e) {
                System.out.println("Please put in a Valid Number");
                choice = 0;
                choice = in.nextInt();
            }
            
            switch (choice) {
            case 1: 

            case 2:

            case 3:

            case 4:

            case 5:
            
            case 6:
                
            case 7:
                
            case 8:
                
            case 9:
                run = false;
                break;
                
            default:
                System.out.println("Input incorreto. Tente novamente.");
                choice = in.nextInt();
                break;
            }
        }
    }
}

请考虑这个解决方案:

Scanner in设置为class字段,

移动启动信息输出并将服务切换到另一个方法(没有任何循环),该方法会抛出 InputMismatchException,例如:

public class Calculator {

    static Scanner in = new Scanner(System.in);

    private static void calc() throws InputMismatchException {
         int choice = 0;
         System.out.println("Bem-vindo a calculadora! Escolha uma das opções abaixo!");
         ...
         System.out.println("Enter a number");
         choice = in.nextInt();

         switch (choice) {

         case 1:
            System.out.println("entered=" + choice);
            break;
         ...
         default:
            System.out.println("Input incorreto. Tente novamente.");
            break;
         }
    }

和 运行 它在循环中使用 try - catch 语句,例如:

public static void main(String[] args) {
    boolean ok = true;
    while (ok) {
        try {
            calc();
            ok = false;
        } catch (InputMismatchException e) {
            System.out.println("InputMismatchException " + e.getMessage());
            in.nextLine();
        }
    }
    in.close();
}

-- 编辑--

但当然可以在 calc() 方法中忽略抛出 InputMismatchException,因为它是未经检查的异常