J'ai un problème d'utilisation de l'instruction switch lorsque j'ai essayé de gérer une situation particulière . Par exemple, J'ai 3 cas: A, B, C.
si j'utilise l'instruction if-else, elle ressemblera à ceci:
if ( not C){
do statement_3
if B
do statement 2
else if A
do statement 1
}
Si je veux utiliser l'instruction switch pour faire la même chose, j'ai quelques problèmes.
switch (variable){
case A: do statement_1
case B: do statement_2
// how to do statement 3 here?
}
J'essaie d'éviter les codes en double. Je me demande donc comment rendre les codes aussi simples que possible.
MISE À JOUR 1 :
pour que mes codes/questions soient plus clairs, je veux juste que mes codes soient aussi simples que possible, c'est pourquoi je veux utiliser l'instruction switch au lieu de if-else. De plus, j'ai entendu dire que l'instruction-switch est généralement plus rapide que si-sinon. (Je ne suis pas sûr à 100% cependant).
Je veux utiliser le commutateur-cas parce que les cas A, B, C sont de type enum. ils ne sont pas variables. Désolé pour la confusion.
chaque instruction contient plus de 10 lignes de codes. C'est pourquoi je ne veux pas faire les choses suivantes:
switch (enum variable) {
case A:
statement1
statement3
break;
case B:
statement2
statement3
break;
}
je recommanderais de définir exactement quels staments doivent être exécutés:
switch (variable){
case A:
statement_1();
statement_3();
break;
case B:
statement_2();
statement_3();
break;
}
pour la mise à jour 3:
créer des méthodes pour ces 10 lignes:
public void statement_1() {
//your 10 lines of code
}
si vous exécutez toujours statement_3, sauf dans le cas C, vous pouvez utiliser if/else-blocks au fur et à mesure que vous les écrivez.
mais à mon avis honnête: définir EXACTEMENT ce qui doit être fait dans quel cas si vous avez un petit nombre de cas . il est plus facile de lire pour les autres
Tu peux le faire:
switch (variable){
case A: do statement_1; do statement_3; break;
case B: do statement_2; do statement_3; break;
}
Pourquoi ne pas imbriquer le commutateur dans l'instruction if? il n'y a pas de code de répétition de cette façon.
if(!C){
statement_3;
switch(variable){
case A:
statement_1;
break;
case B:
statement_2;
break;
}
ou utiliser à la fois l'instruction if et le commutateur?
if(!C){
statement_3;
}
switch(variable){
case A:
statement_1;
break;
case B:
statement_2;
break;
Ici, vous devez utiliser if statement
de cette manière car dans switch
, il y a aussi normalement default
valeur.
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");
}
Si un cas contient plus de 2-3 déclarations, il est préférable de les extraire en tant que méthodes distinctes (du point de vue de la lisibilité et du code propre):
switch (variable){
case A: handleCaseA(); break;
case B: handleCaseB(); break;
default: handleDefaultCase(); break;
}
switch (variable) {
case A:
do statement_1;
do statement_3;
break;
case B:
do statement_2;
do statement_3;
break;
}
Une pause peut économiser beaucoup de temps d'exécution car elle "ignore" l'exécution de tout le reste du code dans le bloc de commutation
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");
}
}
}
La sortie est 10
Je trouve souvent que l'introduction de enum
s ajoute de la clarté. Ici, j'imagine que chaque enum
est un problème qui peut être résolu par un certain nombre de processus:
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();
}
Notez ici que vous obtenez l’avantage supplémentaire de pouvoir gérer certains problèmes en utilisant les solutions d’autres problèmes (voir ma D
enum
).