do{
try{
System.out.println("Please enter the publication year :");
year=keyboard.nextInt();
doneYear=true;
} catch(InputMismatchException e) {
System.out.println("Please enter a number.");
}
} while(!doneYear);
这不起作用。一旦我遇到第一个异常,它就无限循环。
答案 0 :(得分:1)
nextXYZ()
方法(在您的情况下具体为nextInt()
)如果失败并使用InputMismatchException
,则不会使用令牌。如果发生这种情况,您需要使用当前的,错误的令牌才能继续并获得一个新令牌。否则,你只是继续重新评估,重新输入相同的输入,导致你观察到的无限循环:
do {
try {
System.out.println("Please enter the publication year :");
year = keyboard.nextInt();
doneYear = true;
} catch (InputMismatchException ignore) {
keyboard.nextLine(); // consume and ignore current input
System.out.println("Please enter a number.");
}
} while (!doneYear);