web-dev-qa-db-fra.com

Déclaration Java Switch

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.

  • pour A, je veux faire statement_1 et statement_3.
  • pour B, je veux faire statement_2 et statement_3.
  • pour C, je ne veux rien faire

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 :

  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).

  2. 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.

  3. 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;
    

    }

13
Joey

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

26
Philipp Sander

Tu peux le faire:

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

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;
1
Arthur Weborg

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");
        }       
0
R.Nish

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;
}
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

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

0
Keshav Gera

Je trouve souvent que l'introduction de enums 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 Denum).

0
OldCurmudgeon