问题描述
我正在尝试捕获 InputMismatch 异常并显示一条消息,告诉我异常发生的位置以及需要什么类型的输入。我需要这个循环直到输入正确的输入。我通过递增“static
”和“statusCode
”(这是退出循环所必须的expectedCode
。statusCode
在每个循环之前递增,以及expectedCode
在每个方法的末尾递增。我将与异常相关的方法和数据放在不同的类中,以便以后更容易访问。
当我第一次输入正确的输入(int)时,它按预期工作。但是,如果我输入不兼容的数据,我首先会得到一个额外的空白输入行,然后在输入之后,我的异常被捕获。问题是之后的所有输入都抛出异常,无论我输入什么,都无法继续。
之前声明了一个名为 statusCode
的 ExceptionTracker
对象。
相关代码如下:
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;
}
}
解决方法
听起来他没有丢弃您的旧输入。确保在循环圈重新启动时重置它。