Заявление о переключении Java

У меня проблема с использованием оператора switch, когда я пытался справиться с особой ситуацией. Например, У меня 3 случая: A, B, C.

  • для A, я хочу сделать statement_1 и statement_3.
  • для B, я хочу сделать statement_2 и statement_3.
  • для C, я ничего не хочу делать

если я использую оператор if-else, он будет выглядеть следующим образом:

 if ( not C){
    do statement_3

   if B
      do statement 2
   else if A
      do statement 1

 }

Если я хочу использовать оператор switch, чтобы сделать то же самое, у меня есть некоторые проблемы.

switch (variable){
case A:  do statement_1
case B: do statement_2
// how to do statement 3 here?  
}

Я пытаюсь избежать дублированных кодов. Поэтому я думаю, что как сделать коды настолько простыми, насколько я могу.

ОБНОВЛЕНИЕ 1:

  • чтобы сделать мои коды/вопрос более ясными, я просто хочу сделать свои коды как просто/ясно, как я могу, поэтому я хочу использовать оператор switch вместо if-else. Кроме того, я слышал, что switch-statement обычно быстрее, чем if-else. (Я не уверен на 100%, хотя).

  • Я хочу использовать switch-case, потому что Case A, B, C - тип перечисления. Oни не являются переменными. Извините за путаницу.

  • каждое утверждение содержит более 10 строк кодов. Вот почему я не хочу делать следующее:

    switch (enum variable) {
    case A:
      statement1
      statement3
     break;
    case B:
      statement2
      statement3
     break;
    

    }

Ответ 1

Я бы рекомендовал точно определить, что должно быть выполнено:

switch (variable){
    case A: 
        statement_1();
        statement_3();
        break;
    case B: 
        statement_2();
        statement_3();
        break;
}

для Update-3:

создайте методы для этих 10 строк:

public void statement_1() {
    //your 10 lines of code
}

если вы всегда выполняете оператор_3, за исключением случая C, вы можете пойти с if/else-blocks, как вы их написали.

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

Ответ 2

Вы можете сделать это:

switch (variable){
  case A:  do statement_1; do statement_3; break;
  case B:  do statement_2; do statement_3; break;    
}

Ответ 3

Почему бы не вставить переключатель в оператор if? здесь нет кода повторения.

if(!C){
    statement_3;
    switch(variable){
    case A:
        statement_1;
        break;
    case B: 
        statement_2;
        break;
}

или использовать как оператор if, так и переключатель?

if(!C){
    statement_3;
}
switch(variable){
case A:
    statement_1;
    break;
case B: 
    statement_2;
    break;

Ответ 4

Я часто нахожу, что введение enum добавляет ясности. Здесь я думаю, что каждый enum является проблемой, которая может быть решена с помощью нескольких процессов:

enum Issue {
  A {
    void handleIt () {
      statement_1();
      statement_3();
    }
  },
  B {
    void handleIt () {
      statement_2();
      statement_3();
    }
  },
  C {
    void handleIt () {
      // Do nothing.
    }
  },
  D {
    void handleIt () {
      A.handleIt();
      B.handleIt();
    }
  };

  abstract void handleIt();
}

Обратите внимание, что вы получаете дополнительное преимущество в том, что имеете возможность обрабатывать определенные проблемы, используя решения других проблем (см. мой D enum).

Ответ 5

Если в случае более 2-3 операторов, это bette (с точки зрения удобочитаемости и чистого кода), чтобы извлечь их как отдельные методы:

switch (variable){
    case A: handleCaseA(); break;
    case B: handleCaseB(); break;
    default: handleDefaultCase(); break;
}

Ответ 6

switch (variable) {
case A:  
do statement_1;
do statement_3;
break;
case B:
do statement_2;
do statement_3;
break;
}

Ответ 7

Разрыв может сэкономить много времени выполнения, поскольку он "игнорирует" выполнение всего остального кода в блоке коммутатора

public class SwitchExample {  
public static void main(String[] args) {  
    int number=10;  
    switch(number){  
    case 10: System.out.println("10");break;  
    case 20: System.out.println("20");break;  
    case 30: System.out.println("30");break;  
    default:System.out.println("Not in 10, 20 or 30");  
    }  
}  
}  

Выход 10