439 Stimmen

Verwendung von zwei Werten für eine switch case-Anweisung

In meinem Code führt das Programm je nach dem vom Benutzer eingegebenen Text etwas aus. Mein Code sieht so aus:

switch (name) {
        case text1: {
            //blah
            break;
        }
        case text2: {
            //blah
            break;
        }
        case text3: {
            //blah
            break;
        }
        case text4: {
            //blah
            break;
        }

Allerdings ist der Code innerhalb der Fälle text1 und text4 gleich. Daher habe ich mich gefragt, ob es möglich wäre, etwas ähnliches wie

case text1||text4: {
            //blah
            break;
        }

Ich weiß, dass der || Operator im case-Statement nicht funktioniert, aber gibt es etwas ähnliches, das ich verwenden kann.

9voto

scottmrogowski Punkte 1883

Die Klammern sind unnötig. Einfach tun

case text1:
case text4:
  doSomethingHere();
  break;
case text2:
  doSomethingElse()
  break;

Wenn jemand neugierig ist, wird dies als Fallthrough bezeichnet. Die Möglichkeit, dies zu tun, ist der Grund, warum break; notwendig ist, um case-Anweisungen zu beenden. Weitere Informationen finden Sie im Wikipedia-Artikel http://en.wikipedia.org/wiki/Switch_statement.

8voto

Ankur Sharma Punkte 283

Der Durchfallansatz ist meiner Meinung nach der beste.

case text1:
case text4: {
        //Yada yada
        break;
}

7voto

Joseph DSCS Punkte 71

Sie können verwenden:

case text1: case text4: 
     do stuff;
     break;

5voto

David_DD Punkte 575

Die Fallwerte sind einfach etikettenlose "goto"-Punkte, die den gleichen Einstiegspunkt teilen können:

case text1:
case text4: {
//Mache etwas
break;
}

Beachten Sie, dass die Klammern überflüssig sind.

4voto

Colin D Punkte 5593

Die fallthrough-Antworten von anderen sind gute.

Allerdings könnte ein anderer Ansatz sein, Methoden aus dem Inhalt Ihrer case-Anweisungen auszulagern und dann einfach die entsprechende Methode aus jedem Fall aufzurufen.

In dem folgenden Beispiel verhalten sich sowohl case 'text1' als auch case 'text4' gleich:

switch (name) {
        case text1: {
            method1();
            break;
        }
        case text2: {
            method2();
            break;
        }
        case text3: {
            method3();
            break;
        }
        case text4: {
            method1();
            break;
        }

Ich persönlich finde diesen Schreibstil von case-Anweisungen leichter zu pflegen und etwas lesbarer, insbesondere wenn die aufgerufenen Methoden aussagekräftige Namen haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X