尝试Catch保持循环而不是要求另一个值?

时间:2012-11-06 18:48:20

标签: java exception-handling try-catch

我有以下代码:

Scanner inputSide = new Scanner(System.in);

double side[] = new double[3];
int i = 0;
do{
    try{
    System.out.println("Enter three side lengths for a triangle (each followed by pressing enter):");
    side[i] = inputSide.nextDouble();
    i++;
    }
    catch(Exception wrongType){
        System.err.println(wrongType);
        System.out.println("Please enter a number.  Start again!!");
        i=0;
    }
}
while(i<3);

它运行正常,如果我没有输入错误的数据类型,但是如果我输入的不是双重的东西,那么它会一遍又一遍地循环,在try和catch块中打印所有内容而不是等待我进入另一个双。

任何帮助,为什么它这样做 - 因为我似乎无法理解为什么 - 将不胜感激。

谢谢:)

1 个答案:

答案 0 :(得分:2)

问题在于,您使用了input.nextDouble方法,该方法只读取输入中的下一个标记,从而在结尾处跳过newline。见Scanner.nextDouble

现在,如果您第一次输入错误的值,那么它会将newline视为下一个输入。哪个也无效。

您可以在catch块中添加空input.nextLine

catch(Exception wrongType){
    System.err.println(wrongType);
    System.out.println("Please enter a number.  Start again!!");
    i=0;
    input.nextLine();  // So that it consumes the newline left over
}

现在,您的nextLine()会读取剩余的linefeed,并且下次不会将换行作为nextDouble的输入。在这种情况下,即使在您提供任何输入之前,它也会失败。