Falconbyte unterstüzen
Betrieb und Pflege von Falconbyte brauchen viel Zeit und Geld. Um dir auch weiterhin hochwertigen Content anbieten zu können, kannst du uns sehr gerne mit einem kleinen "Trinkgeld" unterstützen.
Thema in Kurzform
//Allgemeine Syntax von switch-case Anweisungen:
int a = 2;
switch(a){
case 1: System.out.println("a ist 1"); break;
case 2: System.out.println("a ist 2"); break;
// usw.
}
- Erstes Beispiel
- break
- default
- Wichtige Regeln
- Übungen
Inhaltsverzeichnis
Erstes Beispiel
Um den switch-case-Mechanismus einzusetzen, müssen wir die beiden Schlüsselbegriffe switch und case wie im folgendem Beispiel verwenden:
char buchstabe = 'B';
switch(buchstabe){
case 'A':
System.out.println("Buchstabe ist A");
break;
case 'B':
System.out.println("Buchstabe ist B");
break;
case 'C':
System.out.println("Buchstabe ist C");
break;
case 'D':
System.out.println("Buchstabe ist D");
break;
}
Wir erzeugen zunächst eine Testvariable buchstabe mit dem Wert 'B'. Diese übergeben wir nun in runden Klammern dem switch-Codeblock, wo der Wert der Variable nun als switch-Wert mit mehreren anderen Werten verglichen wird.
Jeder Vergleich wird mit dem Keyword case beschrieben. Man spricht deshalb auch von der "Fallunterscheidung". Entspricht der switch-Wert nun einem dieser Vergleichswerte, wird der dazugehörende Code ausgeführt.
In unserem Beispiel ist das zweite case ein Treffer und es erscheint auf der Konsole folgender Text:
Buchstabe ist B
break
Das Schlüsselwort break am Ende eines jeden case ist zwar optional, meistens jedoch notwendig, damit das Programm erwartungsgemäß funktioniert. Was bewirkt es? Steht am Ende eines case-Blocks ein break, wird die gesamte switch-case-Struktur sofort beendet. Das ist in der Regel so erwünscht.
Lassen wir die einzelnen break-Anweisungen aber weg, wird selbst nach einem Treffer die gesamte switch-case-Konstruktion bis zum Ende durchlaufen, was zumeist unnötiger Rechenaufwand ist. Das Auslassen von break hat außerdem zur Folge, dass nicht nur das case mit dem Treffer, sondern auch alle folgenden cases ausgeführt werden (jedenfalls solange ein break im Weg steht).
Was meinen Sie, printed der folgende Code?
int number = 1;
switch(number){
case 0:
System.out.println("0");
case 1:
System.out.println("1");
case 2:
System.out.println("2");
case 3:
System.out.println("3");
break;
case 4:
System.out.println("4");
}
Da wir die Variable number mit dem Wert 1 in das switch-case schicken, erhalten wir bei case 1 einen Treffer. Da das break bei case 1 fehlt, läuft die Struktur auch die folgenden case 2 und case 3 durch. Erst case 3 hat am Ende das break, sodass die Kontrollstruktur erst jetzt beendet wird (case 4 wird damit nicht mehr ausgeführt). Auf der Konsole erscheint also:
1
2
3
default
Was passiert, wenn kein case einen Treffer liefert? Richtig: switch-case läuft bis zum Ende durch, wird beendet und es ist nichts geschehen.
Für den Fall, dass kein case dem switch-Wert entspricht, können wir mit default dafür sorgen, dass ein von uns geschriebener Standardcode ausgeführt wird. Zum Beispiel:
switch("Jupiter"){
case "Merkur":
System.out.println("Erster Planet");
break;
case "Venus":
System.out.println("Zweiter Planet");
break;
case "Erde":
System.out.println("Dritter Planet");
break;
case "Mars":
System.out.println("Vierter Planet");
break;
default:
System.out.println("Kein innerer Planet");
}
Da dem switch-Wert "Jupiter" kein Vergleichswert der einzelnen cases entspricht, wird der Code von default ausgeführt.
Der default-Teil muss übrigens nicht am Ende stehen, sondern kann auch zwischen cases oder ganz am Anfang geschrieben sein.
Wichtig Regeln
Beim Einsatz von switch/case müssen wir insgesamt vier Regeln beachten. Verletzen wir auch nur eine davon, ist der Code Schrott.
- Kompatible Datentypen: In einem switch/case-Statement sind nur bestimmte Datentypen sowie Wrapperklassen zulässig. Hier eine Übersicht der erlaubten (und underlaubten) Datentypen
Datentyp in switch/ case zulässig? byte short char int String enums boolean long float double Dies gilt auch für die entsprechenden Wrapper-Klassen. So ist der Einsatz der Klassen Byte, Short, Character, Integer erlaubt. Nicht möglich dagegen ist die Verwendung der Klassen Boolean, Long, Float und Double.
- Alle cases müssen denselben oder einen kompatiblen Datentyp wie der switch-Wert haben.
- Es darf keine doppelten cases geben!
- Die case-Statements müssen entweder Literale oder Konstanten (final) sein. Es dürfen sonst keine Variablen als case verwendet werden.
Sehen wir uns hierzu ein Beispiel an:
int number = 10;
int number2 = 20;
final int number3 = 30;
switch(number){
case 50:
// Code
break;
case 199.99:
// Code
break;
case (number < 40):
// Code
break;
case 'A':
// Code
break;
case number2:
// Code
break;
case number3:
// Code
break;
}
Mit dem ersten case (case 50:) ist alles in Ordnung.
Der zweite case allerdings verursacht schon einen Compiler-Fehler. Der Grund ist der double-Wert (199.99), was nicht zulässig ist.
Auch der dritte Case (number < 40) ist keine gute Idee! Ein boolescher Ausdruck kann niemals funktionieren.
Der char 'A' im vierten case ist voll in Ordnung (char und int sind voll kompatibel; 'A' als int-Wert ist 65.)
Der nächste case (case number2:) haut auch nicht hin, was daran liegt, dass die Variable number2 keine unveränderliche Konstante (mit final deklariert) ist. Wenn wir schon unbedingt Variablen in einer switch-case-Kontrollstruktur anwenden wollen, dann läuft die Sache nur mit denen, die final sind. Das ist der Grund, warum number3 im letzten case einsetzbar ist.
Übungen
einfach
Welchen Wert hat die Variable count am Ende des Code-Abschnitts?
String type = "Java";
int count = 0;
switch (type){
case "PHP":
count++;
case "Java":
count++;
case "JavaScript":
count++;
case "C#":
count++;
}
mittel
Was macht der folgende Code?
final char a = 'A', d='D';
char b = 'B';
switch (b){
case a:
case 'B': System.out.print("Hello ");
case 'C': System.out.print("Java"); break;
case d:
case 'F': System.out.print("JavaScript");
}
A. Hello
B. Hello Java
C. Fehler im Code in Zeile 1
D. Fehler im Code in Zeile 4
E. Fehler im Code in Zeile 5 und 8
schwer
Simulieren Sie die Funktion eines Taschenrechners mit zwei Operanden für die vier Grundrechenarten und Modulo.
Speichern Sie die Wahl der Rechenart sowie die Werte der beiden zu verrechnenden Operanden in entsprechenden Variablen.
Lassen Sie testweise 44 % 3 rechnen.
Geben Sie das Ergebnis auf der Konsole aus.