3

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

4

1 回答 1

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 块

于 2013-04-06T18:47:10.500 回答