Java在使用Try/Catch时陷入无限循环
对于学校的一个项目,我试图使用try/catch来防止当用户输入字母而不是所需的输入类型(即双精度输入)时程序崩溃Java在使用Try/Catch时陷入无限循环,java,try-catch,Java,Try Catch,对于学校的一个项目,我试图使用try/catch来防止当用户输入字母而不是所需的输入类型(即双精度输入)时程序崩溃 公共静态双输入端(){ 扫描仪输入=新扫描仪(系统输入); 双面=-1; 做{ 试一试{ System.out.println(“输入边长(单位):”; side=in.nextDouble(); } 捕获(输入不匹配异常e){ System.out.println(“必须输入编号”); } }而(侧
公共静态双输入端(){
扫描仪输入=新扫描仪(系统输入);
双面=-1;
做{
试一试{
System.out.println(“输入边长(单位):”;
side=in.nextDouble();
}
捕获(输入不匹配异常e){
System.out.println(“必须输入编号”);
}
}而(侧<0);
返回侧;
}
当我执行这段代码时,它陷入了一个循环中,它无限次地输出“输入边长(单位):”和“必须输入数字”。我不熟悉使用try/catch,所以我可能对这种行为并不熟悉。无论如何,如果有人能帮我解决这个问题,我将不胜感激。提前感谢。如果输入错误,您必须释放缓冲区,在
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;
}
而不是试抓块非常感谢!我正在研究in.hasNextDouble()方法。@ClementHoang,不客气!看一看,您会发现对于每种数据类型都有大量的
Scanner#hastnextwhatever()
,因此您不需要try-catch块。我不记得如果你的输入是错误的,它是否也需要释放缓冲区,如果它通过一个无限循环,它和try-catch是同一个问题,你用我的答案解决它!如果这是最适合你的,请点击答案左边的“V”符号来“勾选”它:)供其他阅读者阅读。这是因为当调用异常时,扫描程序不会移动到下一个输入标记,而是尝试再次读取它。添加非数据类型特定的.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
}