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.

3voto

Iskuskov Alexander Punkte 3532

JEP 354: Switch-Ausdrücke (Vorschau) in JDK-13 und JEP 361: Switch-Ausdrücke (Standard) in JDK-14 werden die switch-Anweisung erweitern, sodass sie als Ausdruck verwendet werden kann.

Jetzt können Sie:

  • direkt Variablen aus dem Switch-Ausdruck zuweisen,

  • die neue Form des Switch-Labels verwenden (case L ->):

    Der Code rechts von einem "case L ->" Switch-Label ist auf einen Ausdruck, einen Block oder (bequemerweise) ein throw-Statement beschränkt.

  • mehrere Konstanten pro Fall verwenden, getrennt durch Kommas,

  • und es gibt auch keine break-Anweisungen mehr:

    Um einen Wert aus einem Switch-Ausdruck zurückzugeben, wurde die break-Anweisung mit dem Wert durch eine yield-Anweisung ersetzt.

Das Demo aus einer der Antworten könnte wie folgt aussehen:

public class SwitchExpression {

  public static void main(String[] args) {
      int month = 9;
      int year = 2018;
      int numDays = switch (month) {
        case 1, 3, 5, 7, 8, 10, 12 -> 31;
        case 4, 6, 9, 11 -> 30;
        case 2 -> {
          if (java.time.Year.of(year).isLeap()) {
            System.out.println("Wow! Es ist ein Schaltjahr!");
            yield 29;
          } else {
            yield 28;
          }
        }
        default -> {
          System.out.println("Ungültiger Monat.");
          yield 0;
        }
      };
      System.out.println("Anzahl der Tage = " + numDays);
  }
}

2voto

Java 12 und höher

switch (name) {
    case text1, text4 -> // etwas tun ;
    case text2, text3, text 5 -> // etwas anderes tun ;
    default -> // Standardfall ;
}

Sie können auch einen Wert über den switch case-Ausdruck zuweisen :

String text = switch (name) {
    case text1, text4 -> "hallo" ;
    case text2, text3, text5 -> "welt" ;
    default -> "auf wiedersehen";
};

"yield" Schlüsselwort

Es ermöglicht Ihnen, einen Wert durch den switch case-Ausdruck zurückzugeben

String text = switch (name) {
    case text1, text4 ->
        yield "hallo";
    case text2, text3, text5 ->
        yield "welt";
    default ->
        yield "auf wiedersehen";
};

2voto

Abraham Punkte 4525

Ein schönerer Weg, das zu handhaben

if (["Joe", "Peterson", "Bond" ].indexOf(name) > -1)

    //Etwas tun

else if (["Joe", "Peterson", "Bond" ].indexOf(name) > -1)

    //Anderes tun ...

Dies können Sie für mehrere Werte mit dem gleichen Ergebnis tun

2voto

Bryant Davis Punkte 21

Wenn Sie nur ein : hinzufügen, wird jeder Fall den gleichen Codeblock ausführen, bis Sie zum ersten break gelangen. In diesem Fall führen 123 und 456 also die gleiche Ausführung aus. Stellen Sie sicher, dass Sie das break einschließen, und wenn Sie Code für 123 und 456 hinzufügen und kein break hinzufügen, werden beide Codeblöcke ausgeführt. Dies kann oder kann nicht für Java der Fall sein, aber in JavaScript öffnen Sie {} immer dann, wenn Sie einen begrenzten Variablenbereich haben, den Sie innerhalb des Falls definieren müssen, da sie ansonsten in die anderen Fälle durchsickern oder durchbrechen.

    case '123':
    case '456': //some code
         break;
    case '789' {
    /// some code
         break;
}  
 default break;

1voto

flags Punkte 413

Weitere Variation?

  switch (name) {
    case ['text1', 'text2']:
      // etwas tun
      break
    case 'text3':
      // etwas tun
      break
    default:
      // etwas tun
      break
  }

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