微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何在这里捕获 InputMismatchException ?

如何解决我如何在这里捕获 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;
      }
  }

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。