我有以下代码:
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块中打印所有内容而不是等待我进入另一个双。
任何帮助,为什么它这样做 - 因为我似乎无法理解为什么 - 将不胜感激。
谢谢:)
答案 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
的输入。在这种情况下,即使在您提供任何输入之前,它也会失败。