为什么在发生异常后Scanner不会读取值?这是代码。抛出异常时,在下一次迭代中它不允许用户输入数据,它总是进入catch块并打印文本。
public class Main {
public static void main(String[] args) {
Scanner inputScanner = new Scanner(System.in);
boolean correctInput = false;
do {
try {
int readInt = inputScanner.nextInt();
correctInput = true;
} catch (InputMismatchException e) {
correctInput = false;
System.out.println("Please enter int value");
}
} while (!correctInput);
}
}
答案 0 :(得分:2)
nextInt
不会消耗非整数值,因此一旦发生异常,任何此类输入都将 ad infinitum 传递给异常块。因此,您需要使用此值
} catch (InputMismatchException e) {
System.err.println("Invalid integer: " + inputScanner.nextLine());
...
}
或者更好地使用hasNextInt
while (inputScanner.hasNextInt()) {
... // no boolean flag needed
}
答案 1 :(得分:0)
} catch (InputMismatchException e) {
correctInput = false;
System.out.println("Please enter int value");
inputScanner.next();
}
使用一个令牌并继续