我正在尝试编写一个方法,要求用户输入一个正整数。如果未输入正整数,则会输出“请输入正值”的消息。这部分不是问题。问题是,当我尝试实现捕获 InputMismatchExceptions 的 try catch 语句(以防用户意外输入字符或字符串)时,循环无限运行并吐出与 InputMistmatchException 关联的错误消息。这是我的代码:private static int nonNegativeInt(){ boolean properValue = false; int variable = 0; do { try { while (true) { variable = scanner.nextInt(); if (variable < 0) { System.out.println("Please enter a positive value"); } else if (variable >= 0) { break; } } properValue = true; } catch (InputMismatchException e){ System.out.println("That is not a valid value."); } } while (properValue == false); return variable; }
3 回答
阿波罗的战车
TA贡献1862条经验 获得超6个赞
本质上,当给定的令牌无效时,扫描器会遇到错误,因此它无法超过该值。当下一次迭代再次开始时,scanner.nextInt() 再次尝试扫描下一个仍然是无效的输入值,因为它从未通过那里。
你想要做的是添加行
scanner.next();
在您的 catch 子句中,基本上说跳过该标记。
旁注:您的方法通常不必要地长。你可以把它缩短成这个。
private static int nonNegativeInt() {
int value = 0;
while (true) {
try {
if ((value = scanner.nextInt()) >= 0)
return value;
System.out.println("Please enter a positive number");
} catch (InputMismatchException e) {
System.out.println("That is not a valid value");
scanner.next();
}
}
}
添加回答
举报
0/150
提交
取消