Switch-case-Anweisung: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K (Neues für Switch in Java 11)
 
(9 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Mit einer switch-case-Anweisung kann man Bedingungen testen. Sie werden sich jetzt bestimmt fragen, wofür wir das brauchen, wenn wir das auch mit [[If-Anweisung]] machen können. Wir benötigen eine switch-case-Anweisung in dem Fall, wenn wir zwischen vielen Bedingungen unterscheiden wollen. Schauen Sie sich dieses Beispiel an:
+
Mit einer switch-case-Anweisung kann man Bedingungen testen.  
  
<code=java>
+
Sie werden sich jetzt bestimmt fragen, wofür wir das brauchen, wenn wir das auch mit einer [[If-Anweisung]] machen können. Wir benötigen eine switch-case-Anweisung in dem Fall, wenn wir zwischen vielen Bedingungen unterscheiden wollen. Das Konstrukt ist dann gegenüber einer if-Anweisung deutlich besser lesbar.
  
 +
Bis Java 5 waren nur primitive Ganzzahl-Typen (byte, short, char, und int) prüfbar. Mit Java 7 kamen dann noch Zeichenketten ({{JAPI|String}}) und Aufzählungstypen (enum) dazu. Außerdem auch die [[Wrapper|Wrapperklasssen]] der primitiven Datentypen ({{JAPI|Character}}, {{JAPI|Byte}}, {{JAPI|Short}}, und {{JAPI|Integer}}).
  
public class switch_case_Anweisung {
+
Schauen wir uns dieses Beispiel an:
  
public static void main(String[] args) {
+
<syntaxhighlight lang="java">
+
import java.util.Calendar;
int zahl;
 
 
zahl = 3;
 
 
switch(zahl)
 
{
 
case 1:
 
{
 
System.out.print("Unsere Variable hat den Wert 1");
 
break;
 
}
 
case 2:
 
{
 
System.out.print("Unsere Variable hat den Wert 2");
 
break;
 
}
 
case 3:
 
{
 
System.out.print("Unsere Variable hat den Wert 3");
 
break;
 
}
 
case 4:
 
{
 
System.out.print("Unsere Variable hat den Wert 4");
 
break;
 
}
 
case 5:
 
{
 
System.out.print("Unsere Variable hat den Wert 5");
 
break;
 
}
 
default:
 
{
 
System.out.print("Unsere Variable ist größer als 5");
 
}
 
}
 
  
}
+
public class Switch {
  
 +
  public static void main(String[] args) {
 +
      Calendar cal = Calendar.getInstance();
 +
      int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
 +
 +
      switch(dayOfWeek)
 +
      {
 +
        case Calendar.MONDAY:
 +
        System.out.print("Montag");
 +
        break;
 +
 +
        case Calendar.TUESDAY:
 +
        System.out.print("Dienstag");
 +
        break;
 +
 +
        case Calendar.WEDNESDAY:
 +
        System.out.print("Mittwoch");
 +
        break;
 +
 +
        case Calendar.THURSDAY:
 +
        System.out.print("Donnerstag");
 +
        break;
 +
 +
        case Calendar.FRIDAY:
 +
        System.out.print("Freitag");
 +
        break;
 +
 +
        case Calendar.SATURDAY:
 +
        System.out.print("Samstag");
 +
        break;
 +
 +
        case Calendar.SUNDAY:
 +
        System.out.print("Sonntag");
 +
        break;
 +
 +
        default:
 +
        System.out.print("Ungültige Zahl für die Ausgabe des Wochentages!");
 +
      }
 +
  }
 +
}
 +
</syntaxhighlight>
 +
 +
Wir besorgen uns zunächst eine [[Instanz]] eines {{JAPI|Calendar}}-Typs. Die Instanz fragen wir anschließend nach dem aktuellen Wochentag. Die Rückgabe der aufgerufenen get()-[[Methode]] ist eine Ganzzahl vom Typ ''int''. Mit dem ''break''-Befehl wird die switch-case-Anweisung an dieser Stelle verlassen. Wenn wir break nicht schreiben würden, dann würde das Programm weiter laufen und alle folgenden Bedingungen werden auch geprüft werden. Aber das wollen wir hier natürlich nicht, weil es nur einen gültigen Namen eines bestimmten Tages in einer Woche gibt. Wenn wir unser Programm morgen erneut aufrufen würden, wird das es den morgigen Wochentag ausgeben. Sollte in dem unwahrscheinlich Fall eines Fehlers eine Ganzzahl ermittelt werden, die nicht zu einer der Bedingungen passt, dann wird der default-Block ausgeführt. Das ganze kann man natürlich mit [[If-Anweisung|if-else-Konstruktion]] schreiben, jedoch geht das mit switch-case-Anweisung schneller und einfacher.
 +
 +
=Neues für Switch in Java 11=
 +
In Java 11 wurden so genannte Switch Expressions eingeführt. Damit ist die switch-Anweisung etwas verständlicher, das <code>break;</code> fällt nun weg.
 +
<syntaxhighlight lang="java">
 +
switch(day) {
 +
  case MONDAY -> System.out.println("Einkaufen");
 +
  case WEDNESDAY, FRIDAY -> System.out.println("Staubsaugen");
 +
  case TUESDAY, THURSDAY -> System.out.println("Nachhilfe-Unterricht geben");
 +
  case SUNDAY -> System.out.println("Freunde treffen");
 
}
 
}
 +
</syntaxhighlight>
  
</code=java>
+
{{Fragen stellen}}
  
Wir haben eine [[Variable]] deklariert und definiert. Unsere [[Variable]] hat den Wert 3. Danach machen wir in switch eine Abfrage. In den Klammern steht die Bedingung. Wenn unsere [[Variable]] zahl den Wert 3 hat, dann wird der case 3 Block ausgeführt. Mit dem Befehl break wird die switch-case-Anweisung ab dieser Stelle verlassen. Wenn wir break nicht schreiben, dann wird das Programm weiter laufen und alle andere Bedingungen werden ausgeführt und das wollen wir natürlich nicht. Ändern wir jetzt unsere Variable in z.B. 5, dann wird der case 5 Block ausgeführt. Hat unsere [[Variable]] größeren Wert als 5, dann wird der default Block ausgeführt. Das ganze kann man natürlich mit [[If-Anweisung|if-else-Konstruktion]] schreiben, jedoch geht das mit switch-case-Anweisung schneller und einfacher.
+
==Siehe auch==
Als Beispiel siehe auch [[Beispielcode|Switch-Case und Streams]]
+
*[[Beispielcode|Switch-Case und Streams]]
 +
*[https://t3n.de/news/java-14-da-spannendsten-neuen-1260366/ Switch Expressions in Java 14]  
  
[[Kategorie:Java]]
 
 
[[Kategorie:Java Grundlagen]]
 
[[Kategorie:Java Grundlagen]]

Aktuelle Version vom 25. März 2020, 11:03 Uhr

Mit einer switch-case-Anweisung kann man Bedingungen testen.

Sie werden sich jetzt bestimmt fragen, wofür wir das brauchen, wenn wir das auch mit einer If-Anweisung machen können. Wir benötigen eine switch-case-Anweisung in dem Fall, wenn wir zwischen vielen Bedingungen unterscheiden wollen. Das Konstrukt ist dann gegenüber einer if-Anweisung deutlich besser lesbar.

Bis Java 5 waren nur primitive Ganzzahl-Typen (byte, short, char, und int) prüfbar. Mit Java 7 kamen dann noch Zeichenketten (String) und Aufzählungstypen (enum) dazu. Außerdem auch die Wrapperklasssen der primitiven Datentypen (Character, Byte, Short, und Integer).

Schauen wir uns dieses Beispiel an:

import java.util.Calendar;

public class Switch {

   public static void main(String[] args) {
      Calendar cal = Calendar.getInstance();
      int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

      switch(dayOfWeek)
      {
         case Calendar.MONDAY:
         System.out.print("Montag");
         break;

         case Calendar.TUESDAY:
         System.out.print("Dienstag");
         break;

         case Calendar.WEDNESDAY:
         System.out.print("Mittwoch");
         break;

         case Calendar.THURSDAY:
         System.out.print("Donnerstag");
         break;

         case Calendar.FRIDAY:
         System.out.print("Freitag");
         break;

         case Calendar.SATURDAY:
         System.out.print("Samstag");
         break;

         case Calendar.SUNDAY:
         System.out.print("Sonntag");
         break;

         default:
         System.out.print("Ungültige Zahl für die Ausgabe des Wochentages!");
      }
   }
}

Wir besorgen uns zunächst eine Instanz eines Calendar-Typs. Die Instanz fragen wir anschließend nach dem aktuellen Wochentag. Die Rückgabe der aufgerufenen get()-Methode ist eine Ganzzahl vom Typ int. Mit dem break-Befehl wird die switch-case-Anweisung an dieser Stelle verlassen. Wenn wir break nicht schreiben würden, dann würde das Programm weiter laufen und alle folgenden Bedingungen werden auch geprüft werden. Aber das wollen wir hier natürlich nicht, weil es nur einen gültigen Namen eines bestimmten Tages in einer Woche gibt. Wenn wir unser Programm morgen erneut aufrufen würden, wird das es den morgigen Wochentag ausgeben. Sollte in dem unwahrscheinlich Fall eines Fehlers eine Ganzzahl ermittelt werden, die nicht zu einer der Bedingungen passt, dann wird der default-Block ausgeführt. Das ganze kann man natürlich mit if-else-Konstruktion schreiben, jedoch geht das mit switch-case-Anweisung schneller und einfacher.

Neues für Switch in Java 11

In Java 11 wurden so genannte Switch Expressions eingeführt. Damit ist die switch-Anweisung etwas verständlicher, das break; fällt nun weg.

switch(day) {
   case MONDAY -> System.out.println("Einkaufen");
   case WEDNESDAY, FRIDAY -> System.out.println("Staubsaugen");
   case TUESDAY, THURSDAY -> System.out.println("Nachhilfe-Unterricht geben");
   case SUNDAY -> System.out.println("Freunde treffen");
}


Fragen

Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!

Wir helfen dir gerne!


Dir hat dieser Artikel gefallen? Oder Du hast Fehler entdeckt und möchtest zur Berichtigung beitragen? Prima! Schreibe einen Kommentar!

Du musst angemeldet sein, um einen Kommentar abzugeben.


Siehe auch