我必须写一个代码,告诉我格里高利历的特定年份是否是闰年。但是我不确定代码是否会每年都有效。它适用于1900年,1901年,2000年。
在我粘贴代码之前,也许你应该知道什么使格里高年成为闰年:如果模4的年份等于0,那么它是闰年,如果年%4 = 0且年%100 = 0则不是。最后,如果年份%4 = 0且年份%100 = 0且年份%400 = 0,那么它就是。
以下是代码:
public static boolean isLeapYearGregorian(int year) {
if ((year % 4 == 0) && (year % 100 != 0) || (year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0)) {
return true;
}
else {
return false;
}
}
由于
答案 0 :(得分:1)
对于记录,代码可以简单地写成
public static boolean isLeapYearGregorian(int year) {
return (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0);
}
但是为了接近OP的代码,让我们从这开始:
public static boolean isLeapYearGregorian(int year) {
return (year % 4 == 0) && (year % 100 != 0) || (year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0);
}
此时,您需要知道operator precedence in Java,因为上面的ands(&&
)和ors(||
)处于同一级别,这会产生影响。简短回答:AND出现在OR之前。
现在逻辑可以列为:
这就是说:
现在您可以将逻辑与definition of a Gregorian calendar leap year的伪代码进行比较:
if (year is not divisible by 4) then (it is a common year)
else if (year is not divisible by 100) then (it is a leap year)
else if (year is not divisible by 400) then (it is a common year)
else (it is a leap year)
从这里可以直接与我们从您的问题中的代码中提取的逻辑进行比较,并验证是代码正确识别闰年,如维基百科所定义。
如果比较看起来不那么“直截了当”,你可以诉诸truth tables,并详尽地证明这两个逻辑陈述是相同的。