使用Try / Catch时,Java陷入无限循环

时间:2013-04-06 18:46:34

标签: java try-catch

对于学校的项目,我试图使用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的新手,所以我可能根本不熟悉这种行为。无论如何,如果有人可以帮助我找出问题,我将不胜感激。提前谢谢。

1 个答案:

答案 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块