Несколько / повторяющихся случаев в операторе переключения Java - PullRequest
4 голосов
/ 12 августа 2011

Я хотел бы знать, как 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 : нет; хорошо ... case 2 : yep! Выполнить этот код !; case 3 : nope; case 1 снова?: все еще нет !; снова случай 2? : да! Выполнить этот код; больше никаких дел : все выполнено! ")

Ответы [ 4 ]

5 голосов
/ 12 августа 2011

Что-то не так с двумя операторами switch?

switch (someIntegerValue) {
   case 1:
   case 2:
      DoSomethingForBothCases();
      break;
   case 3:
      DoSomethingUnrelated();
      break;
}

switch (someIntegerValue) {
   case 1:
      DoSomethingForCase1ThatReliesUponExecutionOfTheEarlierFunctionCall();
      break;
   case 2:
      DoSomethingForCase2ThatReliesUponExecutionOfTheEarlierFunctionCall();
      break;
}

Я бы так и сделал.

1 голос
/ 12 августа 2011

Вы не можете повторять регистры в операторе переключения Java, это ошибка компиляции.Вам нужно будет сделать то, что вы предложили, что на самом деле выглядит как хороший факторинг.

0 голосов
/ 17 июня 2016

Как насчет этого? ПРИМЕЧАНИЕ: я не знаю столько 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
0 голосов
/ 12 августа 2011

Вы не сможете это сделать. У вас не может быть повторяющихся случаев, компилятор выбросит шипение. Я понимаю вашу логику в том, что вы хотели бы проверить каждый случай, а затем продолжить и проверить другие случаи, но оператор break в любом случае вытащил бы вас из оператора switch-case. Я бы порекомендовал вам использовать цикл (то есть для while), если вы хотите постоянно проверять разные вещи. Сопоставление операторов if с циклом поможет вам выполнить биты кода раньше других.

Или, если вам действительно нравятся операторы switch, вы можете создать несколько переключателей, чтобы некоторые вещи происходили раньше других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...