Java 作业:为什么要绕过捕获?
我有以下代码:Java 作业:为什么要绕过捕获?,java,try-catch,Java,Try Catch,我有以下代码: public static String userInput(Scanner input) { String date = ""; int year = 0; try{ System.out.print("Please enter a date (mm/dd/yyyy): "); date = input.next(); boolean leapYear = getLeapYear(d
public static String userInput(Scanner input) {
String date = "";
int year = 0;
try{
System.out.print("Please enter a date (mm/dd/yyyy): ");
date = input.next();
boolean leapYear = getLeapYear(date);
boolean dateCheck = checkDate(date,leapYear);
if(dateCheck == true) {
return date;
}
} catch(IllegalArgumentException e) {
System.out.println(year + " " + "is not a leap year");
}
return date;
}
我已通过调试验证,当我输入非闰年日期(如1601年2月29日)时,dateCheck为false。我认为会发生的是,当if语句为false时,程序将继续执行捕获。取而代之的是,它完全跳过了捕获的部分,并进入了返回日期。我哪里出错了?只有当try主体抛出
异常时,Catch才会运行(在您的示例中,仅使用IllegalArgumentException
)。如果您希望代码始终运行,那么它应该位于-
只有当try主体抛出一个异常时,Catch才会运行(在您的示例中,只有使用IllegalArgumentException
)。如果您希望代码始终运行,那么它应该位于-
只有当try主体抛出一个异常时,Catch才会运行(在您的示例中,只有使用IllegalArgumentException
)。如果您希望代码始终运行,那么它应该位于-
只有当try主体抛出一个异常时,Catch才会运行(在您的示例中,只有使用IllegalArgumentException
)。如果您希望代码始终运行,那么它应该位于-
原因是您的checkDate不会抛出异常
如果您更改:
if(dateCheck == true) {
return date;
}
到
您可以为他抛出一个,它应该会像您预期的那样工作。原因是您的checkDate不会抛出异常
如果您更改:
if(dateCheck == true) {
return date;
}
到
您可以为他抛出一个,它应该会像您预期的那样工作。原因是您的checkDate不会抛出异常
如果您更改:
if(dateCheck == true) {
return date;
}
到
您可以为他抛出一个,它应该会像您预期的那样工作。原因是您的checkDate不会抛出异常
如果您更改:
if(dateCheck == true) {
return date;
}
到
您可以为他抛出一个,它应该按照您的预期工作。catch
块的目的是什么?catch只有在发生异常时才会执行。它不是控制流的替代品。这不是catch
的作用。关于它的用途。@SotiriosDelimanolis-通过在前面加上“问问你自己”来修改你的评论,“如果我想抛出一个让用户知道的异常…”-你可能问错了问题。首先询问您希望用户看到什么。如果您想让用户看到一条错误消息,说输入错误,那么只需让程序打印一条。您不需要抛出异常。如果您希望程序停止运行,用户看到整个异常回溯,则抛出新的IllegalArgumentException()
是可以的,但这可能不是必需的。catch
块的目的是什么?catch仅在异常发生时才执行。它不是控制流的替代品。这不是catch
的作用。关于它的用途。@SotiriosDelimanolis-通过在前面加上“问问你自己”来修改你的评论,“如果我想抛出一个让用户知道的异常…”-你可能问错了问题。首先询问您希望用户看到什么。如果您想让用户看到一条错误消息,说输入错误,那么只需让程序打印一条。您不需要抛出异常。如果您希望程序停止运行,用户看到整个异常回溯,则抛出新的IllegalArgumentException()
是可以的,但这可能不是必需的。catch块的目的是什么?catch仅在异常发生时才执行。它不是控制流的替代品。这不是catch
的作用。关于它的用途。@SotiriosDelimanolis-通过在前面加上“问问你自己”来修改你的评论,“如果我想抛出一个让用户知道的异常…”-你可能问错了问题。首先询问您希望用户看到什么。如果您想让用户看到一条错误消息,说输入错误,那么只需让程序打印一条。您不需要抛出异常。如果您希望程序停止运行,用户看到整个异常回溯,则抛出新的IllegalArgumentException()是可以的,但这可能不是必需的。catch块的目的是什么?catch仅在异常发生时才执行。它不是控制流的替代品。这不是catch
的作用。关于它的用途。@SotiriosDelimanolis-通过在前面加上“问问你自己”来修改你的评论,“如果我想抛出一个让用户知道的异常…”-你可能问错了问题。首先询问您希望用户看到什么。如果您想让用户看到一条错误消息,说输入错误,那么只需让程序打印一条。您不需要抛出异常。如果您希望程序停止运行,并且用户看到整个异常回溯,那么抛出新的IllegalArgumentException()
是可以的,但这可能不是必需的。如果您输入“cxdcf234”作为日期,它将抛出异常,或者输入一些其他无法解析为日期的无效值,它将抛出异常。如果您输入“cxdcf234”,它将抛出异常作为日期或其他一些无效值,无法解析为日期。如果您输入“cxdcf234”作为日期或其他一些无效值,无法解析为日期,则会引发异常。如果您输入“cxdcf234”作为日期或其他一些无效值,无法解析为日期,则会引发异常。谢谢您的评论。我明白我错在哪里了。其他人则表示,不正确的日期不是非法的争议例外。好啊我能理解。该方法要求扫描对象,但收到了一个。那么,错误的日期会是什么类型的例外呢?我的目标是停止该程序并通知用户他们不能进入非闰年的2月29日。@comfortablyNumb使用日历
,并致电感谢您的评论。