Несколько / повторяющихся случаев в операторе переключения Java
Я хотел бы знать, как Java обрабатывает несколько идентичных экземпляров одного и того же случая. Я думаю, что следующее имеет смысл, концептуально:
switch (someIntegerValue)
{
case 1:
case 2:
DoSomethingForBothCases();
break;
case 3:
DoSomethingUnrelated();
break;
case 1:
DoSomethingForCase1ThatReliesUponExecutionOfTheEarlierFunctionCall();
break;
case 2:
DoSomethingForCase2ThatReliesUponExecutionOfTheEarlierFunctionCall();
break;
}
По сути, я хотел бы, чтобы кусок кода выполнялся либо для случая 1, либо для 2 (с использованием сброса), но позже, чтобы фрагмент кода выполнялся только для случая 2.
Скорее, необходимо ли следующее?
switch (someIntegerValue)
{
case 1:
DoSomethingForBothCases();
DoSomethingForCase1ThatReliesUponExecutionOfTheEarlierFunctionCall();
break;
case 2:
DoSomethingForBothCases();
DoSomethingForCase2ThatReliesUponExecutionOfTheEarlierFunctionCall();
break;
case 3:
DoSomethingUnrelated();
break;
}
Мой реальный код более сложный, но он использует тот же принцип (то есть что-то вроде "case 1: nope; хорошо... case 2: yep! Выполнить этот код!; case 3: nope; снова case 1?: Все еще nope!; case 2 again?: yep! выполнить этот код; больше никаких дел: All Done!")
4 ответа
Вы не можете повторять регистры в выражении переключения Java, это ошибка компиляции. Вам нужно будет сделать то, что вы предложили, что на самом деле выглядит как хороший факторинг.
Что-то не так с двумя операторами switch?
switch (someIntegerValue) {
case 1:
case 2:
DoSomethingForBothCases();
break;
case 3:
DoSomethingUnrelated();
break;
}
switch (someIntegerValue) {
case 1:
DoSomethingForCase1ThatReliesUponExecutionOfTheEarlierFunctionCall();
break;
case 2:
DoSomethingForCase2ThatReliesUponExecutionOfTheEarlierFunctionCall();
break;
}
Это то, что я бы сделал.
Как насчет этого? ПРИМЕЧАНИЕ: я не знаю столько Java, только Swift 2
var someIntegerValue = 1
func someSwitch(){
switch (someIntegerValue) {
case 1:
break;
case 2:
DoSomethingForBothCases();
break;
case 3:
DoSomethingUnrelated();
break;
}
}
где у вас есть две кнопки действий,
некоторая кнопка действия СЛЕДУЮЩАЯ
someIntegerValue +=1 // changes someIntegerValue to next case
someIntegerValue() //loads switch
некоторая кнопка действия 2 Назад
someIntegerValue -=1 // changes someIntegerValue to next case
someIntegerValue() //loads switch
Вы не сможете сделать это. У вас не может быть повторяющихся случаев, компилятор выбросит шипение. Я понимаю вашу логику в том, что вы хотели бы проверить каждый случай, а затем продолжить и проверять другие случаи, но оператор break в любом случае вытащил бы вас из оператора switch-case. Я бы порекомендовал вам использовать цикл (т. Е. Для while), если вы хотите постоянно проверять разные вещи. Сопоставление операторов if с циклом поможет вам выполнить биты кода раньше других.
Или, если вам действительно нравятся операторы switch, вы можете создать несколько вариантов переключения, чтобы некоторые вещи происходили раньше других.