在我的主要方法中是以下代码:
int hours = getHours();
这是get hours()代码:
public static int getHours() {
int hours = 0;
boolean hoursNotOk = true;
do {
try {
hours = console.nextInt();
hoursNotOk = false;
}catch(Exception e) {
System.out.print(e);
}finally {
if(hoursNotOk) {
System.out.print(", please re-enter the hours again:");
}else {
System.out.print("**hours input accepted**");
}
}
}while(hoursNotOk);
return hours;
}
第一次console.nextInt()要求我输入,因此可以说我在控制台中输入了“ 2”,它将引发异常并再次遍历try块,但这一次它没有询问我进行输入并不断从捕获中打印出来,最后阻止,为什么会发生这种情况?
答案 0 :(得分:2)
由于nextInt()
仅读取数字,而不是在您按回车键后附加的\n
,因此您需要清除以下内容才能再次读取数字,在此示例中,我会{{1} }在nextLine()
块中。 here's more indepth explanation
工作示例:
catch
答案 1 :(得分:1)
一种更简单的方法是在引发异常之前测试您是否可以读取int。无论如何,您都需要先放弃当前单词或行,然后再试一次。
public static int getHours() {
while (true) {
if (console.hasNextInt()) {
System.out.print("**hours input accepted**");
return console.nextInt();
}
console.nextLine(); // discard the line and try again
System.out.print(", please re-enter the hours again:");
}
}