Что касается условия if ... else, которое не работает - PullRequest
0 голосов
/ 09 мая 2019

Код, показанный ниже, работает нормально, но только для одной части, оператора if ... else, который должен возвращать -1, если введенный месяц меньше 1 или больше 12, а введенный год меньше 1 илибольше, чем 9999

Я много раз компилировал его, я даже пытался переставить условия, такие как изменение меньше чем на большее, чем затем помещать весь оператор switch в оператор if.кажется, ничего не работает

public static int getDaysInMonth(int month, int year) {

        int maxDay = 31;
        int secMaxDay = 30;
        int specialDay = 29;
        int minDay = 28;

    if ((month < 1 || month > 12) && (year < 1 || year > 9999)) {
        return -1;

    } else {
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                return maxDay;

            case 2:
                if (isLeapYear(year)){
                    return specialDay;
                } else {
                    return minDay;
                }

            default:
                return secMaxDay;
        }
    }
}

Ожидаемый результат для моего кода выше: когда месяц или год или оба имеют значение меньше 1 или больше максимального значения, он должен вернуть -1.

Ответы [ 2 ]

3 голосов
/ 09 мая 2019

Вы возвращаете -1 только , если оба условия верны.

Таким образом, вы должны изменить

if ((month < 1 || month > 12) && (year < 1 || year > 9999))

с

if ((month < 1 || month > 12) || (year < 1 || year > 9999))

Вы можете украсить его как:

if (month < 1 || month > 12 || year < 1 || year > 9999)

Проблема заключалась в том, что (например), если month < 1 || month > 12 верно, но year < 1 || year > 9999 ложно, тогда true && false возвращает ложь.Он вернет истину, только если оба значения верны.

1 голос
/ 09 мая 2019

Вы действительно хотите вернуть -1 только тогда, когда год и месяц плохие? или, если кто-то ошибается, && между месяцем и годом должно быть || тоже

...