Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何在这里捕获输入不匹配异常?_Java_Loops_Exception_Inputmismatchexception - Fatal编程技术网

Java 我如何在这里捕获输入不匹配异常?

Java 我如何在这里捕获输入不匹配异常?,java,loops,exception,inputmismatchexception,Java,Loops,Exception,Inputmismatchexception,我试图捕获InputMismatch异常,并显示一条消息,告诉我异常发生在哪里以及需要什么类型的输入。我需要这个循环,直到输入正确的输入。我通过递增“statusCode”和“expectedCode”来实现这一点(这就是退出循环所必须的。statusCode。expectedCode在每个循环之前递增,并且在每个方法的末尾递增。statusCode在不同的类中有我的异常相关方法和数据,以便以后更容易访问它 当我第一次输入正确的输入(int)时,它会按预期工作。但是,如果我输入不兼容的数据,我首

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

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

名为
track
ExceptionTracker
对象在前面声明。 以下是相关代码:

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

感谢您的帮助

编辑: 堆栈跟踪如下所示

java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at Event.setGuests(Event.java:106)
    at Event.<init>(Event.java:38)
java.util.InputMismatchException
位于java.base/java.util.Scanner.throwFor(Scanner.java:939)
位于java.base/java.util.Scanner.next(Scanner.java:1594)
位于java.base/java.util.Scanner.nextInt(Scanner.java:2258)
位于java.base/java.util.Scanner.nextInt(Scanner.java:2212)
在Event.setGuests(Event.java:106)
事件时。(Event.java:38)

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

你应该从打印堆栈跟踪开始,看看消息是什么,而不是简单地隐藏错误。@chrylis小心光学-将堆栈跟踪添加到帖子末尾,谢谢你的建议,我以后会记住它。这个结束语问题出在哪里,你能解释一下吗?我不得不移动
input.nextLine()
到catch块,并退出我的
eventException
方法,但为什么它不在那里工作?在早期的测试中,它很好地清除了我方法中的行,但随后它才开始提示自己输入。我将此标记为答案,但如果可能的话,我希望得到更多的解释,这样我就不会做出same稍后再次出错。根据您的曲目类别,输入的寿命(旧)括号关闭后结束,我自己没有完整的代码要看,我想,根据我所看到的,当新的比较发生时,旧的输入已经从内存中清除了。所以他将NULL与您的异常代码进行了比较,这是不一样的。如果您愿意将新旧代码作为纺织品发送给我,我会看得更清楚,但是我不是Java专业人士。
   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;
      }
  }
java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at Event.setGuests(Event.java:106)
    at Event.<init>(Event.java:38)