Подтвердить что ты не робот

Java: могу ли я пропустить только один случай в инструкции switch

В Java, могу ли я пропустить только один из случаев в инструкции switch? Я понимаю, что если я break, я прохожу до конца инструкции switch.

Вот что я имею в виду. Учитывая следующий код, в случае 2, я хочу выполнить случай 2 и случай 1. В случае 3 я хочу выполнить случай 3 и случай 1, но не случай 2.

switch(option) {
    case 3:  // code
             // skip the next case, not break
    case 2:  // code
    case 1:  // code
}
4b9b3361

Ответ 1

Нет, то, что вам нужно, невозможно с помощью инструкции switch. Вы будете проходить через каждый case, пока не нажмете a break. Возможно, вы хотите, чтобы case 1 находился за пределами вашего оператора switch, так что он выполняется независимо.

Ответ 2

Поместите код в методы и вызовите соответствующим образом. Следуя вашему примеру:

void case1() {
    // Whatever case 1 does
}

void case2() {
    // Whatever case 2 does
}

void case3() {
    // Whatever case 3 does
}

switch(option) {
    case 3:
        case3();
        case1();
        break;
    case 2:
        case2();
        case1();
        break;
    case 1: 
        case1();   // You didn't specify what to do for case 1, so I assume you want case1()
        break;
    default:
        // Always a good idea to have a default, just in case demons are summoned
}

Конечно, case3(), case2()... - очень плохие имена методов, вы должны переименовать в нечто более значимое в отношении того, что на самом деле делает метод.

Ответ 3

Мое предложение состоит в том, чтобы не использовать провал для ничего, кроме случаев, подобных следующим:

switch (option) {
    case 3:
        doSomething();
        break;
    case 2:
    case 1:
        doSomeOtherThing();
        break;
    case 0:
        // do nothing
        break;
}

То есть, давая несколько случаев точный один и тот же блок кода для их обработки (путем "укладки" меток case), делая более или менее очевидным то, что поток здесь. Я сомневаюсь, что большинство программистов интуитивно проверяют, проходит ли случай (потому что отступ делает случай похожим на правильный блок) или может эффективно читать код, который опирается на него - я знаю, что не знаю.

Ответ 4

switch(option) 
{
    case 3:
        ...
        break;
    case 2: 
        ...
        break;
}

... // code for case 1

Ответ 5

Что-то вроде этого возможно.

switch(option) {
    case 3:  // code
             // skip the next case, not break
        // BLOCK-3
    case 2:  // code
        if(option == 3) break;
        // BLOCK-2
    case 1:  // code
        // BLOCK-1
}

Ответ 6

В операторе switch, если вы не break, выполняется следующий случай. Чтобы дать вам простой пример

    int value = 2;
    switch(value) {
    case 1: 
        System.out.println("one");
        break;
    case 2: 
        System.out.println("two");
    case 3: 
        System.out.println("three");
        break;
    }

Выведет

two
three

Потому что break не выполняется на случай 2