Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 作业:为什么要绕过捕获?_Java_Try Catch - Fatal编程技术网

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使用
日历
,并致电感谢您的评论。