【发布时间】:2022-11-15 05:13:09
【问题描述】:
public static void main(String[] args){
boolean year = isLeapYear(9999);
System.out.println("Is Leap Year: " + year);
}
public static boolean isLeapYear(int year){
int rem4 = year % 4;
int rem100 = year % 100;
int rem400 = year % 400;
if ((year >= 1 && year <= 9999) && (rem4 == 0) && (rem100 == 0 && rem400 == 0) || (rem100 != 0) && (rem4 == 0)){
return true;
}
return false;
}
当我输入负数年份(到目前为止只有-1024)时,我的范围条件不起作用。 但是,如果我输入任何其他负闰年,它就会起作用(-2020)。所以我不知道我可能遗漏了什么,或者算法的结构是否完全正确。任何帮助将不胜感激。
预期的是,当我输入一个不是闰年的年份时,如果它是一个负闰年,它会返回 false。
【问题讨论】:
-
问题的症结在于最后一个
|| (rem100 != 0 && rem4 == 0)。由于它之前的其他子句是&&,因此该子句被视为针对全部的条款。-1024 % 100 != 0为真,-1024 % 4 == 0也为真,因此 OR 满足整个if。if中的布尔逻辑需要一些工作。 -
你是不是把括号弄错了?因为在开头使用
((,在最后使用))并没有多大意义。在这种情况下,您最好只使用一个括号,因为在整个表达式周围加上一个额外的括号并没有任何作用。 -
考虑将每个条件移动到私有方法以简化所有条件的整体连接。
-
真的没有负闰年这样的事情。人们怎么会知道距离耶稣诞生的时间是 4 年的倍数?
-
好吧,从技术上讲there never was a leap year before 1582。 “算法”下的最后几条语句(“闰日”之前)也解决了将该算法预测到早些年的问题,但如果你走得太远,你最终会落入暂时的兔子洞。
标签: java algorithm if-statement leap-year