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.

801voto

PSR Punkte 38053

Sie können beide CASE-Anweisungen wie folgt verwenden.

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

SIEHE DIESES BEISPIEL: Das Codebeispiel berechnet die Anzahl der Tage in einem bestimmten Monat:

class SwitchDemo {
    public static void main(String[] args) {

        int monat = 2;
        int jahr = 2000;
        int numDays = 0;

        switch (monat) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                numDays = 31;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                numDays = 30;
                break;
            case 2:
                if (((jahr % 4 == 0) && 
                     !(jahr % 100 == 0))
                     || (jahr % 400 == 0))
                    numDays = 29;
                else
                    numDays = 28;
                break;
            default:
                System.out.println("Ungültiger Monat.");
                break;
        }
        System.out.println("Anzahl der Tage = "
                           + numDays);
    }
}

Dies ist die Ausgabe des Codes:

Anzahl der Tage = 29

FALLTHROUGH:

Ein weiterer interessanter Punkt ist die break-Anweisung. Jede break-Anweisung beendet die umgebende switch-Anweisung. Die Kontrollfluss geht weiter mit der ersten Anweisung nach dem switch-Block. Die break-Anweisungen sind notwendig, weil ohne sie Anweisungen in switch-Blöcken durchfallen: Alle Anweisungen nach dem übereinstimmenden case-Label werden in Sequenz ausgeführt, unabhängig von dem Ausdruck nachfolgender case-Labels, bis eine break-Anweisung erreicht wird.

BEISPIELCODE:

public class SwitchFallThrough {

    public static void main(String[] args) {
        java.util.ArrayList zukuenftigeMonate =
            new java.util.ArrayList();

        int monat = 8;

        switch (monat) {
            case 1:  zukuenftigeMonate.add("Januar");
            case 2:  zukuenftigeMonate.add("Februar");
            case 3:  zukuenftigeMonate.add("März");
            case 4:  zukuenftigeMonate.add("April");
            case 5:  zukuenftigeMonate.add("Mai");
            case 6:  zukuenftigeMonate.add("Juni");
            case 7:  zukuenftigeMonate.add("Juli");
            case 8:  zukuenftigeMonate.add("August");
            case 9:  zukuenftigeMonate.add("September");
            case 10: zukuenftigeMonate.add("Oktober");
            case 11: zukuenftigeMonate.add("November");
            case 12: zukuenftigeMonate.add("Dezember");
            default: break;
        }

        if (zukuenftigeMonate.isEmpty()) {
            System.out.println("Ungültige Monatsnummer");
        } else {
            for (String monatsname : zukuenftigeMonate) {
               System.out.println(monatsname);
            }
        }
    }
}

Dies ist die Ausgabe des Codes:

August
September
Oktober
November
Dezember

Verwenden von Strings in switch-Anweisungen

In Java SE 7 und höher können Sie ein String-Objekt in der switch-Anweisung verwenden Ausdruck. Das folgende Codebeispiel, zeigt die Monatsnummer basierend auf dem Wert des Strings mit dem Namen month:

public class StringSwitchDemo {

    public static int getMonthNumber(String month) {

        int monatsnummer = 0;

        if (month == null) {
            return monatsnummer;
        }

        switch (month.toLowerCase()) {
            case "januar":
                monatsnummer = 1;
                break;
            case "februar":
                monatsnummer = 2;
                break;
            case "märz":
                monatsnummer = 3;
                break;
            case "april":
                monatsnummer = 4;
                break;
            case "mai":
                monatsnummer = 5;
                break;
            case "juni":
                monatsnummer = 6;
                break;
            case "juli":
                monatsnummer = 7;
                break;
            case "august":
                monatsnummer = 8;
                break;
            case "september":
                monatsnummer = 9;
                break;
            case "oktober":
                monatsnummer = 10;
                break;
            case "november":
                monatsnummer = 11;
                break;
            case "dezember":
                monatsnummer = 12;
                break;
            default: 
                monatsnummer = 0;
                break;
        }

        return monatsnummer;
    }

    public static void main(String[] args) {

        String month = "August";

        int returnierteMonatsnummer =
            StringSwitchDemo.getMonthNumber(month);

        if (returnierteMonatsnummer == 0) {
            System.out.println("Ungültiger Monat");
        } else {
            System.out.println(returnierteMonatsnummer);
        }
    }
}

Die Ausgabe dieses Codes ist 8.

AUS Java-Dokumentationen

62voto

Grijesh Chauhan Punkte 54909

Sie können das folgende tun, um mehrere Fälle für eine switch-Anweisung zu verwenden:

case "ersterFall":
case "zweiterFall": {
    // Führen Sie hier den Code für beide Fälle aus
}

35voto

Naman Punkte 21229

Zusammenfassung: durch Kommas getrennt

switch (name) {
    case text1, text4  -> doX() ;
    case text2          -> doY() ;
    case text3          -> doZ() ;
}

Switch-Ausdrücke

Mit der Integration von JEP 361: Switch-Ausdrücke in Java 14 und später kann man die neue Form des switch-Labels mit einem Komma zwischen mehreren Werten verwenden.

case text1, text4 -> {
     //blah
} 

oder um das Beispiel aus einer der Antworten umzuformulieren, etwas wie :-

public class RephraseDemo {

    public static void main(String[] args) {
        int month = 9;
        int year = 2018;
        int numDays = 0;

        switch (month) {
            case 1, 3, 5, 7, 8, 10, 12 ->{
                numDays = 31;
            }
            case 4, 6, 9, 11 ->{
                numDays = 30;
            }
            case 2 ->{
                if (((year % 4 == 0) &&
                        !(year % 100 == 0))
                        || (year % 400 == 0))
                    numDays = 29;
                else
                    numDays = 28;
            }
            default ->{
                System.out.println("Ungültiger Monat.");

            }
        }
        System.out.println("Anzahl der Tage = " + numDays);
    }
}

31voto

Bohemian Punkte 386825

Die case-Werte sind lediglich codelose "Goto"-Punkte, die denselben Einstiegspunkt gemeinsam nutzen können:

case text1:
case text4: 
    //blah
    break;

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

25voto

kaljak Punkte 1243

Einfach machen

case text1: case text4: 
     Mach etwas;
     brechen;

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