我如何在这里捕获 InputMismatchException?
How am I catching an InputMismatchException here?
我正在尝试捕获 InputMismatch 异常并显示一条消息,告诉我异常发生的位置以及需要什么类型的输入。我需要这个循环直到输入正确的输入。我通过递增“statusCode
”和“expectedCode
”来做到这一点(这是 statusCode
必须退出循环。expectedCode
在每个循环之前递增,并且statusCode
在每个方法的末尾递增。我将与异常相关的方法和数据放在不同的 class 中,以便以后更容易访问。
当我第一次输入正确的输入(一个整数)时,它按预期工作。但是,如果我输入不兼容的数据,我首先会得到一个额外的空白输入行,然后在输入之后,我的异常就会被捕获。问题是之后的所有输入都抛出异常,无论我输入什么,我都无法继续。
之前声明了一个名为 track
的 ExceptionTracker
对象。
这是相关代码:
track.incrementExpected(); //expectedCode=1
while(track.getStatusCode()!=track.getExpectedCode())
{
try
{
setGuests(); //statusCode=1 if successful
}
catch(InputMismatchException mis)
{
track.eventException();
}
}
setGuests() 方法:
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
}
在 ExceptionTracker class:
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)
听起来他没有丢弃你的旧输入。确保在循环圈重新开始时将其重置。
我正在尝试捕获 InputMismatch 异常并显示一条消息,告诉我异常发生的位置以及需要什么类型的输入。我需要这个循环直到输入正确的输入。我通过递增“statusCode
”和“expectedCode
”来做到这一点(这是 statusCode
必须退出循环。expectedCode
在每个循环之前递增,并且statusCode
在每个方法的末尾递增。我将与异常相关的方法和数据放在不同的 class 中,以便以后更容易访问。
当我第一次输入正确的输入(一个整数)时,它按预期工作。但是,如果我输入不兼容的数据,我首先会得到一个额外的空白输入行,然后在输入之后,我的异常就会被捕获。问题是之后的所有输入都抛出异常,无论我输入什么,我都无法继续。
之前声明了一个名为 track
的 ExceptionTracker
对象。
这是相关代码:
track.incrementExpected(); //expectedCode=1
while(track.getStatusCode()!=track.getExpectedCode())
{
try
{
setGuests(); //statusCode=1 if successful
}
catch(InputMismatchException mis)
{
track.eventException();
}
}
setGuests() 方法:
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
}
在 ExceptionTracker class:
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)
听起来他没有丢弃你的旧输入。确保在循环圈重新开始时将其重置。