Случаи переключения значений переменных в Java - PullRequest
1 голос
/ 14 февраля 2011

Я хочу сделать переключатель, где 5 случаев функционально идентичны, но тогда будут другие уникальные случаи. Есть ли способ перечислить значение дела, которое обрабатывает 5 различных значений? Спасибо

Ответы [ 6 ]

9 голосов
/ 14 февраля 2011

Вы можете смешать метки в коммутаторе

switch (variable) {
  case 'a': case 'b' : case 'c' : case 'd' :
     do something;
     break;
  case 'e': case 'f' :
     do something else
     break;
  default:
     do something;
}

Помогает размышление о переключателе как о переходе на метку (возможно, в сочетании с переходом (разрывом) до конца). Это означает, что переключатель

switch (variable) {
  case 'a': case 'b' : case 'c' : case 'd' :
     do something;
     // note that there's no break here.
  case 'e': case 'f' :
     do something else
     break;
  default:
     do something;
}

будет «делать что-то» и «делать что-то еще» для «a», «b», «c» и «d»; в то время как он будет «делать что-то еще» только для «е» и «f». Наконец, если это не что-то из вышеперечисленного, он попадает в блок по умолчанию «сделать что-то».

2 голосов
/ 14 февраля 2011

Это очень легко сделать.Вместо того, чтобы иметь только одно значение регистра, которое обрабатывает все 5 различных значений, пусть 5 значений регистра будут проходить друг к другу, например так:

2 голосов
/ 14 февраля 2011
switch (value) {
case 1:
case 2:
case 3:
case 4:
    doSomethingIdentical();
    break;
case 5:
    doSomethingDifferent();
    break;
default:
    break;
}
2 голосов
/ 14 февраля 2011

Пока вы не положите break; на переключатель, он перейдет к следующему утверждению.

Таким образом, вы можете получить что-то вроде этого:

String value(int val) {
    String out = "";
    switch(val) {
    case 0:
        out = "case 0";
        break;
    case 1:
        out = "case 1";
        break;
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
        out = "case 2, 3, 4, 5 or 6";
        break;
    case 7:
        out = "case 7";
        break;
    }
    return out;
}
0 голосов
/ 01 мая 2019

Начиная с Java 12, я считаю, что это поддерживается. Проверьте JEP 354 . Я никогда не использовал синтаксис, но я думаю, что он будет работать так в вашем случае.

switch (day) {
    case 1, 2, 3, 4, 5    -> System.out.println("1-5");
    case 7                -> System.out.println(7);
    case 8                -> System.out.println(8);
    case 9                -> System.out.println(9);
}

на соответствующей ноте JEP 325 тоже круто

0 голосов
/ 14 февраля 2011

Да, просто используйте переключатель следующим образом:

switch(v) {

   case 1:
   case 2:
   case 3:
       identicFunctionality();
       break;
   case 4:
       other01();
       break;
   case 5:
       other02();
       break;
   default:
       _default();
}
...