public class LeapYear {
public static void main(String[] args) {
int year = Integer.parseInt(args[0]);
boolean isLeapYear;
// divisible by 4
isLeapYear = (year % 4 == 0);
// divisible by 4 and not 100
isLeapYear = isLeapYear && (year % 100 != 0);
// divisible by 4 and not 100 unless divisible by 400
isLeapYear = isLeapYear || (year % 400 == 0);
System.out.println(isLeapYear);
}
}
我正在传递1900
作为我的输入。第一个条件的计算结果为true,因为它可以被4整除,但1900
也应该被100整除...
为什么我得到1900年不是闰年......第二个&&&条件...... (year % 100 !=0)
更新
public class TestSample {
public static void main(String[] args){
int leapYear = Integer.parseInt(args[0]);
boolean isLeapYear;
isLeapYear = (leapYear % 4 == 0) && (leapYear % 100 != 0);
System.out.println("Its Leap Year" +isLeapYear);
}
}
编译此程序会打印1900
而不是leapYear How ????在这里,我甚至没有检查它是否可以被400整除。
答案 0 :(得分:14)
解释您的代码:
isLeapYear = (year % 4 == 0);
// isLeapYear = true
isLeapYear = isLeapYear && (year % 100 != 0);
// year % 100 IS 0. so the second part evaluates to false giving
// true && false which yields isLeapYear as false
isLeapYear = isLeapYear || (year % 400 == 0);
// this is just false || false
// which evaluates to false
我的另一个建议是使用GregorianCalendar找到你想要的东西:
GregorianCalendar cal = new GregorianCalendar();
System.out.println( cal.isLeapYear(1900) );
答案 1 :(得分:5)
答案 2 :(得分:3)
你知道1900年不是闰年,对吗?所以答案是正确的。
// divisible by 4 and not 100
isLeapYear = isLeapYear && (year % 100 != 0);
这完全符合评论中的内容。 1900可以被4 和 100整除,因此它与上述条件不匹配。相比之下,1904可以被4整除,而不可以被100整除,所以它匹配。
答案 3 :(得分:1)
第一个问题已经解释过了,对吧!
所以更新:
isLeapYear = (leapYear % 4 == 0) && (leapYear % 100 != 0);
装置
isLeapYear = (1900 / 4 leaves 0 as remainder, and 0 ==0 is true)
AND
( 1900 / 100 leaves 0 as remainder, so 0 != 0 is FALSE);
isLeapYear = true AND false ==> false
答案是......假。这就是你所拥有的。
无论如何,1900年并不是闰年。
在任何网站上查看,例如http://www.onlineconversion.com/leapyear.htm或http://www.dataip.co.uk/Reference/LeapYear.php
答案 4 :(得分:1)
if((year%4 == 0&& year%100!= 0)||(year%400 == 0))
{
System.out.println(" Year is LEAP "+year);
}
else{
System.out.println(" Year is NOT LEAP "+year);
}