Java 当抛出异常时,如何防止用户输入被带入?

Java 当抛出异常时,如何防止用户输入被带入?,java,object,exception,methods,Java,Object,Exception,Methods,我不知道是不是睡眠不足,但我就是不明白为什么会发生这种情况 我的代码要求用户提供int值。如果用户键入一些愚蠢的东西,比如“二十七”而不是任何数字,它将抛出inputmaschException异常。这一切都很好 由于某种原因,用户输入值会被带入我的代码中,之后会把一切都搞砸 case 'r': System.out.print("What height to reap at : "); try { reapAt = keyboard.ne

我不知道是不是睡眠不足,但我就是不明白为什么会发生这种情况

我的代码要求用户提供
int
值。如果用户键入一些愚蠢的东西,比如“二十七”而不是任何数字,它将抛出
inputmaschException
异常。这一切都很好

由于某种原因,用户输入值会被带入我的代码中,之后会把一切都搞砸

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) isplay,(N)ew,(Y)ear,(R)eap,(S)ave,(L)oad,e(X)it:R

在什么高度收割:二十七

错误:高度无效

(D) isplay,(北)东,(Y)耳,(R)eap,(S)ave,(L)oad,e(X)it:


我的结果是:

(D) isplay,(N)ew,(Y)ear,(R)eap,(S)ave,(L)oad,e(X)it:R

在什么高度收割:二十七

错误:高度无效

(D)显示,(N)ew,(Y)ear,(R)eap,(S)ave,(L)oad,e(X)it:ERROR:选项无效,请重试“字母T从以前的用户输入中结转”

(D) isplay,(N)ew,(Y)ear,(R)eap,(S)ave,(L)oad,e(X)it:内部
捕获(输入不匹配异常e)
添加以下行:
键盘.nextLine()为了完成该行的读取:

         // ...
         } catch (InputMismatchException e) {
           System.out.println("ERROR: Invalid height");
           keyboard.nextLine();
         }
         // ...
您可能想了解其中的区别

将输入的下一个标记扫描为整数

哪一个

将此扫描仪向前移动超过当前行,并返回所需的输入 被跳过

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

         // ...
         } catch (InputMismatchException e) {
           System.out.println("ERROR: Invalid height");
           keyboard.nextLine();
         }
         // ...
您可能想了解其中的区别

将输入的下一个标记扫描为整数

哪一个

将此扫描仪向前移动超过当前行,并返回所需的输入 被跳过