0

我有以下代码:

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 块中打印所有内容,而不是等待我输入另一个双。

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

谢谢 :)

4

1 回答 1

2

问题是,您使用input.nextDouble了方法,它只读取输入中的下一个标记,因此newline在最后跳过了。请参阅Scanner.nextDouble

现在,如果您第一次输入错误的值,那么它将考虑newline作为下一个输入。这也将是无效的。

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

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下次的输入。在这种情况下,即使在您提供任何输入之前,它也会失败。

于 2012-11-06T18:50:22.900 回答