我不知道是否缺乏睡眠,但是我看不出为什么会这样。
我有我的代码,要求用户提供int
值。如果用户键入一些愚蠢的东西,例如“二十七”而不是任何数字,它将抛出一个InputMismatchException
异常。这一切都很好。
由于某种原因,用户输入值继续保留到我的代码中,之后所有内容混乱了……
case 'r':
System.out.print("What height to reap at : ");
try {
reapAt = keyboard.nextInt();
canadaforestservice.reapTrees(initTreeHeight, initTreeGrowPerYear, reapAt);
} catch (InputMismatchException e) {
System.out.println("ERROR: Invalid height");
}
System.out.println();
System.out.print("(D)isplay, (N)ew, (Y)ear, (R)eap, (S)ave, (L)oad, e(X)it : ");
menuItems = keyboard.next().charAt(0);
break;
预期结果:
(D)播放,(N)ew,(Y)ear,(R)eap,(S)ave,(L)oad,e(X)it:r
要收获多少高度:27
错误:无效的高度
(D)播放,(N)ew,(Y)ear,(R)eap,(S)ave,(L)oad,e(X)it:
我的结果:
(D)播放,(N)ew,(Y)ear,(R)eap,(S)ave,(L)oad,e(X)it:r
要收获多少高度:27
错误:无效的高度
(D)播放,(N)ew,(Y)ear,(R)eap,(S)ave,(L)oad,e(X)it:错误:无效的选项,请重试< / strong> “字母T从先前的用户输入中保留下来”
(D)播放,(N)ew,(Y)ear,(R)eap,(S)ave,(L)oad,e(X)it:
答案 0 :(得分:0)
在catch (InputMismatchException e)
内添加以下行:keyboard.nextLine();
以完成该行的读取:
// ...
} catch (InputMismatchException e) {
System.out.println("ERROR: Invalid height");
keyboard.nextLine();
}
// ...
您可能想阅读Scanner#nextInt()与其中的区别
将输入的下一个令牌扫描为整数
将此扫描器前进粘贴当前行,并返回输入 被跳过