Несколько / повторяющихся случаев в операторе переключения 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, вы можете создать несколько вариантов переключения, чтобы некоторые вещи происходили раньше других.

Другие вопросы по тегам