Вычислить високосный год в Java в обход оператора else - PullRequest
0 голосов
/ 09 апреля 2020

Где-то в моих 30 строках кода должна быть ошибка, но я не могу ее найти, и это сводит меня с ума.

Если я выполняю этот код, используя isLeapYear(2004), я получаю true:

public class LeapYear {

    public static void main(String[] args) {
        isLeapYear(2004);
    }

    public static boolean isLeapYear (int year) {
        boolean status = true;

        if (year >= 0 || year <= 9999) {
            if (year % 4 == 0){
                status = true;
                System.out.println("true");
            } else if (year % 100 == 0){
                status = true;
                System.out.println("true");
            } else if (year % 400 == 0) {
                status = true;
                System.out.println("true");
            } else {
                status = false;
                System.out.println("false");
            }

        } else if (year < 0 || year > 9999){
            status = false;
            System.out.println("false");
        }
        return status;
    }
}

Но если я запускаю его для isLeapYear(-1200), он также возвращает мне true, но не должен.

Почему мой код обходится без else if (year < 0 || year > 9999)?

1 Ответ

1 голос
/ 09 апреля 2020

Вы просто должны изменить свой первый оператор if на:

if (year >= 0 && year <= 9999) {

-1200 всегда был ниже, чем 9999, поэтому он всегда проходил через это условие из-за || .

...