【发布时间】:2020-07-21 20:23:40
【问题描述】:
在我的 30 行代码中一定有一个错误,但我找不到它,这让我发疯了。
如果我使用isLeapYear(2004) 执行此代码,我会收到true:
public class LeapYear {
public static void main(String[] args) {
isLeapYear(2004);
}
public static boolean isLeapYear (int year) {
boolean status = true;
if (year >= 0 || year <= 9999) {
if (year % 4 == 0){
status = true;
System.out.println("true");
} else if (year % 100 == 0){
status = true;
System.out.println("true");
} else if (year % 400 == 0) {
status = true;
System.out.println("true");
} else {
status = false;
System.out.println("false");
}
} else if (year < 0 || year > 9999){
status = false;
System.out.println("false");
}
return status;
}
}
但如果我为isLeapYear(-1200) 运行它,它也会返回一个true,但它不应该。
为什么我的代码绕过 else if (year < 0 || year > 9999) ?
【问题讨论】:
-
使第一个
||和&&-1200 小于 9999 -
因为-1200小于9999,改成&&
-
逻辑在多个地方存在缺陷,因为第一个内部
if也捕获了所有其他情况。 IIRC,规则似乎不正确。除了 %400 之外,%100 应该是假的?! -
代码永远不会到达 else if 语句中的任何一个。如果年份能被 100 或 400 整除,那么它也能被 4 整除。您也可以在离开 if/else 之后将 print 语句替换为打印一次
status。 -
您应该真正学习如何使用调试器 - 这会帮助您立即找到问题。
标签: java if-statement return boolean leap-year