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