switch / case Anweisung in Java

Es kann vorkommen, dass man in einem Programmablauf an eine Stelle kommt, an der mehrere Alternativen angeboten werden sollen. Hat eine solche Verzweigung nur zwei Optionen, löst man das Problem mit einer if-Anweisung.
Möchte man bei einer Verzweigung aber mehr als 2 Möglichkeiten anbieten, so muss man, nach unseren jetzigen Kenntnissen, die Mehrfachverzweigung mit einer mehr oder weniger komplizierten Schachtelung von if-Anweisungen realisieren.



Eine if-Schachtelung für 4 Fälle hat zum Beispiel folgende Gestalt:

if (Bedingung 1)
{
  Anweisungen für Fall 1
}
else 
  {
  if (Bedingung 2){
    Anweisungen für Fall 2
  }
  else 
    {
    if (Bedingung 3){
      Anweisungen für Fall 3
    }
    else 
    {
      Anweisungen für Fall 4
    }
  }
}

 

Je mehr Fälle vorliegen, desto unübersichtlicher wird das Programm.
Man kann aber auch auf die else-Anweisungen verzichten, um das Programm übersichtlicher zu gestalten.

 

Obiges Programm-Beispiel sieht dann so aus:

if (Bedingung 1)
{
  Anweisungen für Fall 1
}
if (Bedingung 2)
{
  Anweisungen für Fall 2
}
if (Bedingung 3)
{
  Anweisungen für Fall 3
}
if (Bedingung 4)
{
  Anweisungen für Fall 4
}

 

Die Übersichtlichkeit hat auch einen Nachteil. Er besteht darin, dass jede if-Anweisung ausgewertet werden muss, gleichgültig, ob eine vorausgegangene if-Anweisung schon erfolgreich war.


switch und case

Für speziell angehäufte if-Anweisungen gibt es die Kurzform mit switch und case.

switch (Ausdruck)
{
   case Konstante:
        Anweisungen
}

 

Die switch-Anweisung vergleicht nacheinander den Ausdruck hinter dem switch mit jedem einzellnen Fallwert.

Stimmt der Ausdruck mit der Konstanten überein, wird die Anweisung hinter der Sprungmarke ausgeführt.

Die Konstanten sind bei der switch-Anweisung auf den Typ int beschränkt! Es können also keine größeren Typen wie long float oder double benutzt werden. In solch einem Fall bleiben als Alternative nur angehäufte if-Anweisungen.


Die Sprungmarke default

Wenn es keine Übereinstimmung mit einer Konstanten gibt, kann mann optional die Sprungmarke default einsetzen.

 

Beispiel:

switch (Ausdruck)
{
   case Konstante:
        Anweisungen
        ......
        default:
}

Findet keine Übereinstimmung statt, geht die Programmabarbeitung hinter default weiter.

 

Beispiel:

int Ausdruck;
Ausdruck = ...   //Initialisierung von Ausdruck

switch (Ausdruck) 
{
  case 1 : Anweisung1;
    break;
  case 2 : Anweisung2;
    break;
  case 3 : Anweisung3;
    break;
  case 4 : Anweisung4;
    break;
  default : Anweisung_sonst;
}

 

Im nächsten Kapitel wollen wir nun ein kleines Programm schreiben, welches uns zu einer Bestimmten Eingabe von Noten einen bestimmten Text ausgibt.