一个简单的闰年逻辑问题

时间:2011-09-12 12:37:57

标签: java

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整除。

5 个答案:

答案 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)

1900年不是闰年。 1600是闰年,1700,1800和1900是闰年,然后2000又是闰年等等。所以你的代码是正确的。这是个好消息,对吗?

答案 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.htmhttp://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);
  }