it-swarm.com.ru

Заявление о переключении 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:

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

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

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

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

    }

13
Joey

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

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

для обновления 3:

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

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

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

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

26
Philipp Sander

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

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

Почему бы не вставить переключатель в оператор 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;
1
Arthur Weborg

Здесь вы должны использовать if statement таким образом, потому что в switch обычно есть также значение default.

if (letter == 'A' || letter == 'B') { System.out.println("Statement 3 ");}
 switch (letter) {
            case 'A':
                System.out.println("Statement 1 ");
                break;

            case 'B':
                System.out.println("Statement 2 ");
                break;

            case 'C':
                System.out.println();
                break;
            default:
                System.out.println("You entered wrong value");
        }       
0
R.Nish

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

switch (variable){
    case A: handleCaseA(); break;
    case B: handleCaseB(); break;
    default: handleDefaultCase(); break;
}
0
Sergii Shevchyk
switch (variable) {
case A:  
do statement_1;
do statement_3;
break;
case B:
do statement_2;
do statement_3;
break;
}
0
Sidarth

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

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

0
Keshav Gera

Я часто нахожу введение enums добавляет ясности. Здесь я представляю, что каждая 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();
}

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

0
OldCurmudgeon