Вам необходимо вернуть значение для каждого пути кода , включая тот, где год предшествует 1853 году. В вашем коде этот случай не учитывается.
Следующая функция будет работать по вашему желанию. Я предполагаю, что вы на самом деле имеете в виду 1582 , поскольку это был год, когда начал использоваться григорианский календарь (во всяком случае, в католическом мире). Поскольку он был принят в октябре того же года, 1582 год не был високосным, несмотря на соблюдение правил 4/100/400.
Я переформатировал код в соответствии с тем, что я считаю более читабельным стилем - я не большой поклонник return
с, за которыми следуют else
с, так как они разбивают смысл по моему мнению (другие могут не согласиться, но Я считаю, что эта форма облегчает выявление проблем с отступами). И, кроме того, вы, похоже, вообще не принимаете во внимание правило каждые четыре года.
public boolean isLeapYear() {
// No leap years before Greg the Pope.
if ( year < 1583 )
return false;
// Multiples of 400 are leap years.
if ( year % 400 == 0)
return true;
// Multiples of 100 (other than multiples of 400) are not.
if ( year % 100 == 0)
return false;
// Multiples of 4 are, assuming they're not multiples of 100.
if ( year % 4 == 0)
return true;
// All other aren't.
return false;
}
Конечно, идеальным решением, вероятно, является просто использование GregorianCalendar.isLeapYear(int year)
, задокументированное здесь . Очень редко вам приходится писать такой базовый кусок кода (кроме домашних заданий), поскольку библиотеки классов Java предоставляют огромный массив полезных вещей.
Весь класс во всей его красоте (включая возможность изменить юлиан-григорианскую дату перехода) задокументирован здесь .