尝试...捕获未捕获到异常,但仍然给我运行时错误

时间:2019-04-27 21:22:46

标签: java exception

我正在做一个简单的项目,用户输入的a应该是两倍。但是,教授希望该代码是白痴证明。因此,我设置了一个try catch来捕获当白痴输入不适合双精度数的东西时出现的异常。但是,当我输入一个字符串时,我仍然会遇到运行时异常。请帮忙!

我只尝试过Try ... Catch块,是否有办法修复该块,或者有另一种方法来完成此工作?

try{
reapHeight = scanner.nextDouble();
} catch (Exception e){
    System.out.println("Error : Invalid Input");
    System.out.print("Please try again : ");
    reapHeight = scanner.nextDouble();
}

我想要

错误:输入无效 请重试:

要显示,但只有运行时异常发生InputMismatchException类型。

2 个答案:

答案 0 :(得分:2)

  

但是只有InputMismatchException类型的运行时异常发生

因为nextDouble()块中的try不会消耗包括换行符在内的完整用户输入,所以在catch块中,第二个nextDouble()抛出错误,即没有抓到。
为避免这种情况,您必须在每次调用nextLine()之后使用nextDouble()
无论如何,您的逻辑是错误的,因为您必须使用循环来获取用户输入,如下所示:

Scanner scanner = new Scanner(System.in);
double reapHeight;
boolean valid = false;
do {
    try {
        reapHeight = scanner.nextDouble();
        scanner.nextLine();
        valid = true;
    } catch (Exception e) {
        System.out.println("Error : Invalid Input");
        System.out.print("Please try again : ");
        scanner.nextLine();
    }
} while (!valid);

答案 1 :(得分:0)

您需要在每个Scanner.nextLine()之后使用Scanner.nextDouble(),并且需要从Scanner.nextDouble()块中删除catch

Scanner in = new Scanner(System.in);
double reapHeight;
System.out.print("Enter a double: ");
while(true){
    try{
        reapHeight = in.nextDouble();
        break;
    }
    catch(InputMismatchException e){
        System.out.println("Error : Invalid Input");
        System.out.print("Please try again : ");
    }
    finally{
        in.nextLine();
    }
}