【发布时间】:2020-12-06 19:55:58
【问题描述】:
我正在尝试完成一个项目,我必须在我的程序中捕获 IllegalArgumentException。它正确地抛出异常,但是当它抛出时,程序终止而不是运行我的 catch 并继续。不知道出了什么问题,我尝试了一些不同的方法。
这是我的主要内容:
import java.util.Scanner;
public class MonthDaysTest
{
public static void main(String[] args)
{
int month = 1, year = 2020;
boolean tryAgain = true; //exception thrown test variable
Scanner input = new Scanner(System.in);
//repeats attempt for input until an exception is not thrown
do
{
try
{
//prompts for int representing the month
System.out.print ("Enter the month (1=January, 2=February, ..., 12=December): ");
month = input.nextInt();
//prompts for int representing the year
System.out.print ("Enter the year: ");
year = input.nextInt();
//sets the test variable to false if an exception is not thrown
tryAgain = false;
}
catch (IllegalArgumentException illegal)
{
input.nextLine(); //discards input so user can try again
System.out.printf("Exception: %s%n%n", illegal.getMessage());
}
}
while (tryAgain);
MonthDays monthDay = new MonthDays(month, year);
//prints out message with number of days in requested month
System.out.printf ("%d%s%d%s%d%s", monthDay.getMonth(), "/", monthDay.getYear(), " has ", monthDay.getNumberOfDays(), " days.");
}
}
还有我的 MonthDays 课程的相关部分:
public class MonthDays
{
private int month, year;
//constructor for class
public MonthDays(int month, int year)
{
setMonth(month);
setYear(year);
}
//sets the month while making sure it is valid
public void setMonth(int month)
{
if (month < 1 || month > 12)
{
throw new IllegalArgumentException("Month must be between 1 and 12.");
}
this.month = month;
}
//sets the year while making sure it is valid in that it is after the implementation of the Gregorian calendar
public void setYear(int year)
{
if (year < 1583)
{
throw new IllegalArgumentException("Year must be 1583 or later.");
}
this.year = year;
}
}
当我使用非法月份输入运行程序时,我会得到这个:
Exception in thread "main" java.lang.IllegalArgumentException: Month must be between 1 and 12.
at monthDaysTest.MonthDays.setMonth(MonthDays.java:24)
at monthDaysTest.MonthDays.<init>(MonthDays.java:15)
at monthDaysTest.MonthDaysTest.main(MonthDaysTest.java:73)
C:\Users\jolen\AppData\Local\NetBeans\Cache\9.0\executor-snippets\run.xml:111: The following error occurred while executing this line:
C:\Users\jolen\AppData\Local\NetBeans\Cache\9.0\executor-snippets\run.xml:94: Java returned: 1
BUILD FAILED (total time: 3 seconds)
我发现另一个问题提出了类似的问题,但我看不出我所做的与那个问题的答案有什么不同。那是在这里:Catching IllegalArgumentException?
【问题讨论】:
标签: java exception try-catch illegalargumentexception