用于计算闰年的 Java 代码java.time.Year::isLeap

2022-09-01 01:41:36

我正在关注“Java的艺术与科学”一书,它展示了如何计算闰年。这本书使用了ACM Java Task Force的库。

以下是书籍使用的代码:

import acm.program.*;

public class LeapYear extends ConsoleProgram {
    public void run()
    {

        println("This program calculates leap year.");
        int year = readInt("Enter the year: ");     

        boolean isLeapYear = ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0));

        if (isLeapYear)
        {
            println(year + " is a leap year.");
        } else
            println(year + " is not a leap year.");
    }

}

现在,这就是我计算闰年的方式。

import acm.program.*;

public class LeapYear extends ConsoleProgram {
    public void run()
    {

        println("This program calculates leap year.");
        int year = readInt("Enter the year: ");

        if ((year % 4 == 0) && year % 100 != 0)
        {
            println(year + " is a leap year.");
        }
        else if ((year % 4 == 0) && (year % 100 == 0) && (year % 400 == 0))
        {
            println(year + " is a leap year.");
        }
        else
        {
            println(year + " is not a leap year.");
        }
    }
}

我的代码有什么问题,或者我应该使用书中提供的代码吗?

编辑::上面的代码都工作正常,我想问的是哪个代码是计算闰年的最佳方法。


答案 1

正确的实现是:

public static boolean isLeapYear(int year) {
  Calendar cal = Calendar.getInstance();
  cal.set(Calendar.YEAR, year);
  return cal.getActualMaximum(Calendar.DAY_OF_YEAR) > 365;
}

但是,如果您要重新发明这个轮子,那么:

public static boolean isLeapYear(int year) {
  if (year % 4 != 0) {
    return false;
  } else if (year % 400 == 0) {
    return true;
  } else if (year % 100 == 0) {
    return false;
  } else {
    return true;
  }
}

答案 2

java.time.Year::isLeap

我想用 Year 类和 isLeap 方法添加新的 java.time 方法来执行此操作:

java.time.Year.of(year).isLeap();

推荐