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