我如何在这里捕获 InputMismatchException ?

问题描述

我正在尝试捕获 InputMismatch 异常并显示一条消息,告诉我异常发生的位置以及需要什么类型的输入。我需要这个循环直到输入正确的输入。我通过递增“static”和“statusCode”(这是退出循环所必须的expectedCodestatusCode 在每个循环之前递增,以及expectedCode 在每个方法的末尾递增。我将与异常相关的方法和数据放在不同的类中,以便以后更容易访问。

当我第一次输入正确的输入(int)时,它按预期工作。但是,如果我输入不兼容的数据,我首先会得到一个额外的空白输入行,然后在输入之后,我的异常被捕获。问题是之后的所有输入都抛出异常,无论我输入什么,都无法继续。

之前声明了一个名为 statusCodeExceptionTracker 对象。 相关代码如下:

track

setGuests() 方法

  track.incrementExpected();          //expectedCode=1
  while(track.getStatusCode()!=track.getExpectedCode())
  {
     try
     {
        setGuests();            //statusCode=1 if successful
     }
     catch(InputMismatchException mis)
     {
        track.eventException();
     }
  }

在 ExceptionTracker 类中:

   public void setGuests()
   {
      guests=0;
      
      while(guests<5||guests>100)
      {
         System.out.print("How many guests will be attending? ");
         guests=input.nextInt();
         input.nextLine();
         if(guests<5)
            System.out.println("Events for fewer than 5 guests are not accepted.");
         else
            if(guests>100)
               System.out.println("Events for greater than 100 guests are not accepted.");
      }
      
      if(guests>=CUTOFF)
         PPG=BPPG;
      else
         PPG=SPPG;
      price=guests*PPG;
      track.incrementStatus();            //statusCode=1
   }

感谢您的帮助。

编辑: 堆栈跟踪如下

   public void incrementExpected()
   {
      ++expectedCode;
   }
   
   public void incrementStatus()
   {
      ++statusCode;
   }
   
   public void eventException()
   {
      input.nextLine();
      System.out.println("Error code: "+statusCode);
      switch(statusCode)
      {
         case 3:
         case 1:
            System.out.println("Input must be of type int.");
            break;
         
         case 2:
         case 0:
            System.out.println("Input must be of type String.");
            break;
      }
  }

解决方法

听起来他没有丢弃您的旧输入。确保在循环圈重新启动时重置它。