我试图将扫描程序命令保留在while循环中,直到用户提供良好的输入为止。如果我运行以下命令,则如果我先输入错误(但要等待第一个输入),它会一直循环而不等待输入。为什么呢?
while (true){
System.out.println("Enter temperature in Fahrenheit: ");
try {
x = in.nextFloat();
break;
} catch (InputMismatchException e) {
System.out.println("Please enter a valid temperature!");
e.printStackTrace();
continue;
}
}
答案 0 :(得分:2)
尝试这种方式:
while (true){
System.out.println("Enter temperature in Fahrenheit: ");
try {
x = Float.parseFloat(in.nextLine());
break;
} catch (Exception e) {
System.out.println("Please enter a valid temperature!");
e.printStackTrace();
continue;
}
}
答案 1 :(得分:1)
当扫描仪引发InputMismatchException时,扫描仪将不会 传递导致异常的令牌,以便可以将其检索 或通过其他方法跳过。
每个https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html
它不断重复读取相同的令牌,并不断尝试将其转换为float并失败。
您需要在异常处理程序中使用该令牌,以便循环的下一次迭代将阻止等待更多输入。