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
}
Ответы
Ответ 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