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