抛出异常时,如何防止用户输入被继承?

时间:2019-04-23 07:45:34

标签: java object exception methods

我不知道是否缺乏睡眠,但是我看不出为什么会这样。

我有我的代码,要求用户提供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:

1 个答案:

答案 0 :(得分:0)

catch (InputMismatchException e)内添加以下行:keyboard.nextLine();以完成该行的读取:

         // ...
         } catch (InputMismatchException e) {
           System.out.println("ERROR: Invalid height");
           keyboard.nextLine();
         }
         // ...

您可能想阅读Scanner#nextInt()与其中的区别

  

将输入的下一个令牌扫描为整数

Scanner#nextLine()其中

  

将此扫描器前进粘贴当前行,并返回输入   被跳过