对于学校的项目,我试图使用try / catch来防止程序在用户输入字母而不是所需的输入类型(即双精度)时崩溃。
public static double inputSide () {
Scanner in = new Scanner(System.in);
double side = -1;
do {
try {
System.out.println("Enter a side length (in units):");
side = in.nextDouble();
}
catch(InputMismatchException e){
System.out.println("Must input number");
}
} while (side < 0);
return side;
}
当我执行这段代码时,它会陷入一个循环,它输出“输入一个边长(以单位为单位):”和“必须输入数字”无限。我是使用try / catch的新手,所以我可能根本不熟悉这种行为。无论如何,如果有人可以帮助我找出问题,我将不胜感激。提前谢谢。
答案 0 :(得分:4)
如果输入错误,您必须释放缓冲区,在catch
块中添加以下行:
in.next();
一切都应该有效:
public static double inputSide () {
Scanner in = new Scanner(System.in);
double side = -1;
do {
try {
System.out.println("Enter a side length (in units):");
side = in.nextDouble();
}
catch(InputMismatchException e){
System.out.println("Must input number");
//this line frees the buffer
in.next();
}
} while (side < 0);
return side;
}
将来,请考虑使用
if(in.hasNextDouble()){
//read
}
而不是try-catch块