02.07 Switch-Case

Eine Alternative zu if ist ein Switch-Case Block. Mit ihm kann man bspw. schneller Zahlen auf einen bestimmten Wert überprüfen als mit if-Anweisungen. Dabei wird zuerst über das switch-Statement die zu überprüfende Variable festgelegt und anschließend, auf die mit case festgelegten, Sprungmarken geprüft. Zunächst waren bis Java5 nur Ganzzahlen (also auch byte, char und short) zur Prüfung von Bedingungen einsetzbar. In Java5 kamen dann enums (Aufzählungen) hinzu, in Java7 schließlich noch Strings.

package sprachsyntax.de.main;
public class SwitchTest1 {
  public static void main(String[] args) {

    int option = 3;
    switch (option) {
      case 1:
        System.out.println("Option 1 wurde ausgewaehlt");
        break;
      case 2:
        System.out.println("Option 2 wurde ausgewaehlt");
        break;
      case 3:
        System.out.println("Option 3 wurde ausgewaehlt");
        break;
      case 4:
        System.out.println("Option 4 wurde ausgewaehlt");
        break;
      default :
        System.out.println("Keine Gueltige Option ausgewaehlt");
    }
  }
}

Sollte keine vorgegebenen Sprungmarke zutreffen, so wird die default-Sprungmarke (sofern vorhanden) ausgewählt. Dabei spielt es keine Rolle, an welcher Stelle sich das Default-Konstrukt befindet. Üblicherweise setzt man es jedoch an das Ende.

Auffällig ist die Benutzung des Schlüsselworts break nach jedem case. Dies ist aber notwendig, da regulär in einem switch-Block alle Aktionen ausgeführt werden, die nach der ersten, zutreffenden Sprungmarke aufgelistet sind. Hätten wir in unserem Fall die breaks weggelassen, würde zusätzlich zu „Option 3 wurde ausgewaehlt“ noch „Option 4 wurde ausgewaehlt“ und „Keine Gueltige Option ausgewaehlt“ ausgegeben werden. Dies ist aber kein Fehlverhalten, sondern durchaus gewollt. Oft kann man solche Varianten in einem TableModel (Daten-Modell für JTable) sehen. Ein Beispiel demonstriert eine von vielen Einsatzmöglichkeiten:

int alter = 4;
switch (alter) {
  case 0:
  case 1:
  case 2:
    System.out.println("Du gehst in die Kinderkrippe");
    break;
  case 3:
  case 4:
  case 5:
  case 6:
    System.out.println("Du gehst in den Kindergarten");
    break;
  case 7:
  case 8:
  case 9:
  case 10:
    System.out.println("Du gehst in die Grundschule");
    break;
  default :
    System.out.println("Du bist zu alt");
}

Größer- und Kleiner als Vergleiche sind in switch-case-Blöcken nicht möglich. Hierzu lernen Sie aber im entsprechenden Kapitel (06.05 Enumerations) mehr.

6 Replies to “02.07 Switch-Case”

  1. morszeck

    Es wäre auch gut, wenn ein Beispiel gezeigt wird, wenn default zbsp in der Mitte des switch Konstrukts wäre. default muss nicht zwangsweise am Ende vom switch Konstrukts stehn.

  2. Stefan Kiesel

    Hallo morszeck,

    da der Default-Case eigentlich immer am Ende stehen sollte, wurde dieser Gesichtspunkt vernachlässigt. Ich werde im nächsten Jahr das Kapitel jedoch entsprechend ergänzen.

    Gruß
    Stefan

  3. Tobi M

    Ist es nicht auch möglich Datentypen vom Typ char zu benutzen um so bspsw. zu testen ob jemand ein j für ja oder n für nein eingegeben hat?

  4. Stefan Kiesel

    Hallo Tobi,

    Ein char überschreitet den Wertebereich eines Integers nicht.

    Leider beschränkt sich diese Methode auch ausschließlich auf den Vergleich von primitiven Datentypen, die den Gültigkeitsbereich eines Integers nicht überschreiten

    Ist also problemlos möglich.

    Grüße
    Stefan

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.