Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试捕捉不到';t捕获异常,但仍给我运行时错误_Java_Exception - Fatal编程技术网

Java 尝试捕捉不到';t捕获异常,但仍给我运行时错误

Java 尝试捕捉不到';t捕获异常,但仍给我运行时错误,java,exception,Java,Exception,我正在做一个简单的项目,其中用户输入a应该是双倍的。然而,教授希望代码是防白痴的。所以,我设置了一个try-catch-to-catch异常,当白痴输入的不是不合适的双精度字符时,会出现异常。但是,当我输入字符串时,仍然会出现运行时异常。请帮忙 我只尝试了“尝试…捕获”块,有没有一种方法可以修复该块,或者有没有其他方法可以实现这一点 try{ reapHeight = scanner.nextDouble(); } catch (Exception e){ System.out.prin

我正在做一个简单的项目,其中用户输入a应该是双倍的。然而,教授希望代码是防白痴的。所以,我设置了一个try-catch-to-catch异常,当白痴输入的不是不合适的双精度字符时,会出现异常。但是,当我输入字符串时,仍然会出现运行时异常。请帮忙

我只尝试了“尝试…捕获”块,有没有一种方法可以修复该块,或者有没有其他方法可以实现这一点

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

错误:输入无效 请重试:

显示,但仅发生InputMismatchException类型的运行时异常

但只有InputMissatchException类型的运行时异常才会发生

因为
try
块中的
nextDouble()
不会使用包括新行字符在内的全部用户输入,所以在
catch
块中,第二个
nextDouble()
抛出未捕获的错误
为了避免这种情况,必须在每次调用
nextDouble()
后使用
nextLine()

无论如何,您的逻辑是错误的,因为您必须使用循环来获取用户的输入,如下所示:

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);

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

Scanner-in=新的扫描仪(System.in);
双重侦察;
System.out.print(“输入双精度:”);
while(true){
试一试{
reapHeight=in.nextDouble();
打破
}
捕获(输入不匹配异常e){
System.out.println(“错误:输入无效”);
System.out.print(“请重试:”;
}
最后{
in.nextLine();
}
}

您应该使用while循环,因为如果用户第二次失败,则不会捕获异常。