Java 有效日期方法逻辑?

Java 有效日期方法逻辑?,java,logic,Java,Logic,我很难理解为什么这个方法使我输入的所有日期都返回为true(有效)。这个方法唯一完美的部分是闰年声明。我尝试定义另一个变量isValid并将其返回为true,然后添加if语句以将方法返回为true或false,但是,这只适用于某些日期,我也不太理解。有人能告诉我为什么这个方法有缺陷吗 public boolean isValid() { if ( month == Month.JAN || month == Month.MAR || month == Month.MAY |

我很难理解为什么这个方法使我输入的所有日期都返回为true(有效)。这个方法唯一完美的部分是闰年声明。我尝试定义另一个变量isValid并将其返回为true,然后添加if语句以将方法返回为true或false,但是,这只适用于某些日期,我也不太理解。有人能告诉我为什么这个方法有缺陷吗

public boolean isValid()
{
  if ( month == Month.JAN || month == Month.MAR || 
        month == Month.MAY || month == Month.JUL
        || month == Month.OCT || month == Month.OCT 
        || month == Month.DEC && day <= Month.DAYS_ODD )
     return true;
  if ( month == Month.APR || month == Month.JUN 
        || month == Month.SEP
        || month == Month.NOV && day <= Month.DAYS_EVEN )
     return true;
  boolean leapYear = false;
  if ( year % Month.QUADRENNIAL == 0 || year % Month.CENTENNIAL == 0
        || year % Month.QUATERCENTENNIAL == 0 )
     leapYear = true;
  if ( leapYear )
     if ( month == Month.FEB && day <= Month.DAYS_FEB + 1)
        return true;
  if ( month == Month.FEB && day <= Month.DAYS_FEB )
     return true;
  return false;

闰年的逻辑是错误的。它应该如下所示

if ( year % Month.QUADRENNIAL == 0
    || year % Month.QUATERCENTENNIAL == 0 )
 leapYear = true;

可被100整除的数字不是闰年,例如:1900,它不是闰年。

逻辑完全错误。如果月份有效,则跳过以下所有检查。事实上,如果日期的任何一个组成部分有效,即使所有其他部分无效,该方法也将返回
true
。您需要在
部分周围使用括号。@JimGarrison如果我错了,请纠正我,但我认为我的第一个if语句背后的逻辑是“如果月份是一月或三月或五月。。。有31天或更少,然后返回true。那么,它们不是必须是两个真正的组件吗?@PM77-1为什么?这将如何改变代码?
if ( year % Month.QUADRENNIAL == 0
    || year % Month.QUATERCENTENNIAL == 0 )
 leapYear = true;