Java 日期检查器不工作-假阴性

Java 日期检查器不工作-假阴性,java,date,conditional-statements,Java,Date,Conditional Statements,所以我得到了一个任务,要建立一个Date类。当我收到日期、月份和年份作为参数时,我需要确保日期有效。我通过调用名为isDateValid的函数来实现。根据说明,如果日期有效,参数将被设置为具有类的属性,否则,我需要使用默认值1/1/2000创建日期。然而,当我运行大学提供的测试仪时,似乎即使日期有效,实际日期也将设置为默认值-这意味着函数isDateValid在应该返回true时返回false 以下是测试仪创建的一个对象: Date d1 = new Date(3, 5, 1998);

所以我得到了一个任务,要建立一个
Date
类。当我收到日期、月份和年份作为参数时,我需要确保日期有效。我通过调用名为
isDateValid
的函数来实现。根据说明,如果日期有效,参数将被设置为具有类的属性,否则,我需要使用默认值
1/1/2000
创建日期。然而,当我运行大学提供的测试仪时,似乎即使日期有效,实际日期也将设置为默认值-这意味着函数
isDateValid
在应该返回true时返回false

以下是测试仪创建的一个对象:

    Date d1 = new Date(3, 5, 1998);
,当我运行它时,我会得到默认日期

功能是:

private boolean isDateValid(整数天、整数月、整数年)
{
返回((月==一月|月==三月|月==七月|月==八月|月==十月|月==十二月|月==五月)和

正如您所确定的,返回语句很难调试。我将它分解为可管理的部分

private boolean isDateValid(int day, int month, int year) {
    bool retVal = true;
    retVal = retVal && (month >= JANUARY) && (month <= DECEMBER);
    retVal = retVal && (day >= 1) && (day <= DAYS_IN_JAN_MAR_MAY_JUL_AUG_OCT_DEC);
    if (month == APRIL || month == JUNE ...) {
        retVal = retVal && (day < DAYS_IN_JUN_APR_SEP_NOV);
    }

    if (month == FEBRUARY) {
         .. handle the complex case of February
    }

    return retVal;
}
private boolean isDateValid(整数天、整数月、整数年){
bool-retVal=true;

retVal=retVal&&(month>=一月)&&(month=1)&&&(day正如您所确定的,返回语句很难调试。我将它分解为可管理的部分

private boolean isDateValid(int day, int month, int year) {
    bool retVal = true;
    retVal = retVal && (month >= JANUARY) && (month <= DECEMBER);
    retVal = retVal && (day >= 1) && (day <= DAYS_IN_JAN_MAR_MAY_JUL_AUG_OCT_DEC);
    if (month == APRIL || month == JUNE ...) {
        retVal = retVal && (day < DAYS_IN_JUN_APR_SEP_NOV);
    }

    if (month == FEBRUARY) {
         .. handle the complex case of February
    }

    return retVal;
}
private boolean isDateValid(整数天、整数月、整数年){
bool-retVal=true;

retVal=retVal&&(month>=一月)&&(month=1)&&&(day我已经用1799年到2100年的每个有效日期以及1000年和9999年的每个有效日期测试了您的
isDateValid
方法。它每次都返回
true
。同样,对于您给出的示例日期,
isDateValid(3,5,1998)
返回true。因此我认为返回默认日期的原因不在您发布的
isDateValid
方法中。我无法告诉您在哪里,但您需要到其他地方查找

但是,您遇到了一个错误:
isDateValid(29,21999)
返回
true
。1999年不是闰年,因此它应该返回false。因此,让我们检查处理二月的代码:

    ((month == FEBRUARY && day <= DAYS_IN_FEB_LEAP))
         || (isLeapYear(year) && day <= DAYS_IN_FEB_NO_LEAP && month == FEBRUARY)

((月==2月和日我已经用1799年到2100年的每个有效日期以及1000年和9999年的每个有效日期测试了你的
isDateValid
方法。它每次都返回
true
。同样,对于你给出的示例日期,
isDateValid(3,5,1998)
返回true。因此我认为返回默认日期的原因不在您发布的
isDateValid
方法中。我无法告诉您在哪里,但您需要到其他地方查找

但是,您遇到了一个错误:
isDateValid(29,21999)
返回
true
。1999年不是闰年,因此它应该返回false。因此,让我们检查处理二月的代码:

    ((month == FEBRUARY && day <= DAYS_IN_FEB_LEAP))
         || (isLeapYear(year) && day <= DAYS_IN_FEB_NO_LEAP && month == FEBRUARY)

((month==二月和&日返回一个巨大的条件不是一个好的做法,因为这会使调试变得困难。你应该在方法中将它分解成单独的条件语句,只返回结果。刚刚测试了一些情况-对于大多数情况,你的
isDateValid
似乎有效。可能真正的问题在其他地方。@ThomasKläger添加了可能存在错误的代码。可能是您所在大学的测试软件以不同的顺序为您提供参数,例如(年、月、日)或(月、日、年)?@OleV.V。以下是测试人员创建的一个对象:Date d1=new Date(3,51998);,当我运行它时,我得到了默认日期返回一个巨大的条件并不是一个好的做法,因为它使调试变得很困难。你应该在方法中将它分解成单独的条件语句,只返回结果。刚刚测试了一些情况-对于大多数情况,你的
isDateValid
似乎有效。可能真正的问题是这里还有。@ThomasKläger添加了可能的错误代码。可能是您所在大学的测试软件以不同的顺序给您提供参数,例如(年、月、日)或(月、日、年)?@OleV.V。这里是测试人员创建的一个对象:Date d1=new Date(3,51998);,当我运行它时,我得到了默认日期我得到了基本的想法,但我肯定遗漏了一些导致错误的重要信息。如果你能提供完整的代码那就太好了。我得到了基本的想法,但我肯定遗漏了一些导致错误的重要信息。如果你能提供完整的代码那就太好了