Вопрос-ответ

Java Code for calculating Leap Year

Java-код для вычисления високосного года

Я слежу за книгой "Искусство и наука 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

Я хотел бы добавить новый java.time способ сделать это с помощью Year класса и isLeap метода:

java.time.Year.of(year).isLeap();
Ответ 3

Я предлагаю вам поместить этот код в метод и создать модульный тест.

public static boolean isLeapYear(int year) {
assert year >= 1583; // not valid before this date.
return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
}

В модульном тестировании

assertTrue(isLeapYear(2000));
assertTrue(isLeapYear(1904));
assertFalse(isLeapYear(1900));
assertFalse(isLeapYear(1901));
Ответ 4
new GregorianCalendar().isLeapYear(year);
2024-03-01 10:56 java