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);,当我运行它时,我得到了默认日期我得到了基本的想法,但我肯定遗漏了一些导致错误的重要信息。如果你能提供完整的代码那就太好了。我得到了基本的想法,但我肯定遗漏了一些导致错误的重要信息。如果你能提供完整的代码那就太好了