wake-up-neo.com

Java Switch-Anweisung

Ich habe ein Problem mit der switch-Anweisung, als ich versuchte, mit einer besonderen Situation umzugehen. Zum Beispiel . Ich habe 3 Fälle: A, B, C.

  • für A möchte ich Anweisung_1 und Anweisung_3 ausführen.
  • für B möchte ich statement_2 und statement_3 machen.
  • für C möchte ich nichts tun

wenn ich die if-else-Anweisung verwende, sieht sie folgendermaßen aus:

 if ( not C){
    do statement_3

   if B
      do statement 2
   else if A
      do statement 1

 }

Wenn ich die switch-Anweisung verwenden möchte, um dasselbe zu tun, habe ich einige Schwierigkeiten.

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

Ich versuche, die doppelten Codes zu vermeiden. Ich denke also, wie man die Codes so einfach wie möglich macht.

UPDATE 1:

  1. um meine Codes/Fragen klarer zu machen, möchte ich nur meine Codes so einfach/klar wie möglich machen, deshalb möchte ich die switch-Anweisung anstelle von if-else verwenden. Ich habe auch gehört, dass die switch-Anweisung normalerweise Schneller ist als if-else. (Ich bin mir allerdings nicht zu 100% sicher).

  2. Ich möchte switch-case verwenden, da Case A, B, C vom Enummentyp sind. sie sind nicht variabel. Entschuldigung für die Verwirrung.

  3. jede Anweisung enthält mehr als 10 Codezeilen. Deshalb möchte ich Folgendes nicht tun:

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

    }

13
Joey

ich würde empfehlen, genau zu definieren, welche Stamente ausgeführt werden sollen:

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

für Update-3:

erstellen Sie Methoden für diese 10 Zeilen:

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

wenn Sie immer statement_3 ausführen, können Sie mit Ausnahme von Fall C die if/else-Blöcke verwenden, wie Sie sie geschrieben haben.

aber meiner ehrlichen Meinung nach: definieren Sie GENAU, was in welchem ​​Fall zu tun ist, wenn Sie eine kleine Anzahl von Fällen haben. Es ist für andere leichter zu lesen

26
Philipp Sander

Du kannst das:

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

Warum nicht den Schalter in die if-Anweisung schachteln? Auf diese Weise gibt es keinen Wiederholungscode.

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

oder sowohl die if-Anweisung als auch den Schalter verwenden?

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

Hier müssen Sie if statement auf diese Weise verwenden, da in switch normalerweise auch default-Wert vorhanden ist.

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

Wenn ein Fall mehr als 2-3 Anweisungen hat, wird er (aus Sicht der Lesbarkeit und des sauberen Codes) als separate Methoden extrahiert:

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

Eine Unterbrechung kann viel Ausführungszeit sparen, da sie die Ausführung des restlichen Codes im Schalterblock "ignoriert"

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

Ausgabe ist 10

0
Keshav Gera

Ich finde oft, dass die Einführung von enums Klarheit schafft. Hier stelle ich mir vor, dass jede enum ein Problem ist, das durch eine Reihe von Prozessen gelöst werden kann:

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

Beachten Sie hierbei, dass Sie den zusätzlichen Vorteil haben, bestimmte Probleme mit den Lösungen anderer Probleme lösen zu können (siehe meine Denum).

0
OldCurmudgeon