Java Scanner异常处理

Air*_*ezx 3 java exception

我希望从用户那里收到一个Double,并处理在用户没有输入double/int的情况下引发的异常; 在这种情况下,我想要求用户再次插入金额.如果捕获到异常,我的代码会陷入循环,并继续打印"插入金额".

    private static double inputAmount() {
    Scanner input = new Scanner(System.in);
    while (true) {
        System.out.println("Insert amount:");
        try {
            double amount = input.nextDouble();
            return amount;
        }catch (java.util.InputMismatchException e) {continue;}
        }
    }
Run Code Online (Sandbox Code Playgroud)

先感谢您.

awk*_*ksp 12

你的程序进入,当输入无效遇到因为一个无限循环nextDouble()不会消耗无效令牌.因此,无论引起异常的任何令牌都将保留在那里,并在下次尝试读取双精度时继续引发异常.

这可以通过在块中放置nextLine()next()调用catch以消耗导致抛出异常的任何输入,清除输入流并允许用户再次输入内容来解决.