Проблема с использованием оператора break в моей программе для расчета високосного года с помощью оператора switch - PullRequest
1 голос
/ 05 марта 2020
public class MonthDayCal {
    public static boolean isLeapYear(int year) {
        if (year < 1 || year > 9999)
            return false;
        else {

            switch (year % 4) {
            case 0:
                if ((year % 100) == 0) {
                    if ((year % 400) == 0) {
                        return true;
                    } else
                        return false;
                } else
                    return true;
                break; // <--java : unreachable statement

            default:
                return false;
            }
        }
    }

    public static void main(String[] args) {
        System.out.println(isLeapYear(2100));
    }
}

Проблема с использованием оператора break в моей программе для расчета високосного года с помощью оператора switch. Почему я не могу использовать перерыв здесь? Если я удаляю этот перерыв, программа работает правильно. Разве я не должен использовать перерыв, чтобы выйти из случая, когда год делится на 4, и остановить блок переключателей.

1 Ответ

1 голос
/ 05 марта 2020

Оператор break никогда не достигается, поскольку все пути выполнения case 0 всегда заканчиваются оператором возврата.

Поэтому он не нужен.

Если вместо возврата оператор, вы присвоили значение переменной, вам понадобится оператор break:

boolean result = false;
if(year<1 || year>9999)
    result = false;
else {
    switch(year%4){
        case 0:
            if((year%100)==0){
                if((year%400)==0){
                    result = true;
                }
                else
                    result = false;
            }
            else
                result = true;
            break;

        default:
            result = false;
    }
}
return result;

Конечно, вы сможете упростить код в этом случае, поэтому вам не понадобится В конце концов, оператор break:

boolean result = false;
if(year>=1 && year<=9999) {
    switch(year%4){
        case 0:
            if((year%100)==0){
                if((year%400)==0){
                    result = true;
                }
            } else {
                result = true;
            }
    }
}
return result;

Тем не менее, это не похоже на хороший сценарий использования оператора switch, поскольку у вас есть только два случая (или даже один).

Например, вы можете написать:

boolean result = false;
if(year>=1 && year<=9999 && year%4 == 0) {
    if((year%100)==0){
        if((year%400)==0){
            result = true;
        }
    } else {
        result = true;
    }
}
return result;

или даже проще (хотя это еще можно упростить):

boolean result = false;
if(year>=1 && year<=9999 && year%4 == 0) {
    if((year%100) != 0 || (year%400)==0) {
        result = true;
    }
}
return result;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...