我正在做一个简单的项目,用户输入的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类型。
答案 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();
}
}