Java 7 Grundkurs

Mehrfachverzweigungen mit switch

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Um eine Variable oder einen Ausdruck mehrfach auf verschiedene Werte zu testen und abhängig davon verschiedene Anweisungen auszuführen, benutzen wir das Konstrukt "Switch" oder "Case".
08:00

Transkript

Ab und zu wird es in Ihren Anwendungen notwendig sein, dass Sie eine Variable oder einen Ausdruck mehrfach auf verschiedene Werte testen und dann abhängig von diesen Werten verschiedene Anweisungen ausführen möchten. Zum besseren Verständnis des Problems habe ich hier wieder ein kleines Beispiel. Und zwar möchte ich hier gern wissen: Wie viele Tage hat ein bestimmter Monat in einem bestimmten Jahr? Dazu gibt es eine Hilfsklasse "Kalender", die wir uns gleich genauer anschauen. Die hat eine Methode "Tage im Monat", die nimmt den Monat und das Jahr und liefert die Anzahl der Tage zurück. Der April 2012 hat z.B. 30 Tage. Das Ergebnis wird dann ausgegeben. Schauen wir uns das mal an: Da steht es, der Monat April hatte im Jahr 2012 30 Tage. Die Umsetzung der Methode "Tage im Monat" lässt sich mit normalen "if-else"-Konstrukten durchführen. Das sieht dann ungefähr so aus: Wir haben hier unsere Methode "Tage im Monat", nimmt ein String, den Monat, und ein Int, das ist das Jahr. Zuerst legen wir uns eine lokale Variable an, die das Ergebnis aufnehmen soll. Jetzt vergleichen wir den Monat, der hier reinkommt, nacheinander mit allen Monaten, die das Jahr so haben kann. Um Strings miteinander zu vergleichen, müssen wir ja immer die Methode "equals" der Klasse String verwenden. Zuerst testen wir also mit diesem "if", ob der Monat Januar heißt, oder ob der Monat März heißt, oder Mai, oder Juli, oder August, oder Dezember. Wenn das der Fall ist, dann wird die Variable "Tage" auf 31 gesetzt. Denn die Monate haben ja 31 Tage. Ansonsten, also "Else", kommt das nächste "if"; jetzt testen wir, ob der Monat vielleicht April, oder Juni, oder September oder November heißt. Dann hat er 30 Tage. Und schließlich haben wir noch den Sonderfall Februar. Der Februar hat 29 Tage, wenn das Jahr ein Schaltjahr ist und ansonsten 28 Tage. Also haben wir hier eine kleine Hilfsmethode, die heißt "Ist Schaltjahr", nimmt das Jahr, und die befindet sich hier unten. "Ist Schaltjahr" und liefert einen Boolean zurück. Und zwar ist ein Jahr ja bekanntlich ein Schaltjahr, wenn es durch vier teilbar ist, es sei denn, es ist auch durch 100 teilbar, dann ist es kein Schaltjahr. Aber, ist es durch 400 teilbar, ist es doch wieder eins. Das nimmt uns diese Methode hier unten ab, damit der Quelltext hier oben etwas lesbarer bleibt. Haben wir den Monat, der hier reingegeben wurde, in keinem unserer Vergleiche gefunden, dann kommen wir hier raus, beim letzten "else" und dann geben wir eine kurze Fehlermeldung aus "Ungültiger Monat" und machen nichts weiter. Am Ende geben wir die Tage, die wir herausgefunden haben, zurück. Nun ist diese Lösung zwar technisch korrekt und sie funktioniert auch richtig, aber es ist insgesamt etwas unübersichtlich. Deshalb gibt es für solche Fälle ein anderes Konstrukt und das heißt "Switch". Die wesentliche Gemeinsamkeit all dieser "ifs" besteht darin, dass immer wieder dieselbe Variable getestet wird, nämlich "Monat". Und genau dafür ist das Switch da. Dort gebe ich eine einzelne Variable an oder auch einen Ausdruck, wenn ich das möchte und dann kann ich verschiedene Werte aufzählen, die diese Variable oder dieser Ausdruck haben könnten, um dann daneben zu schreiben, was im jewiligen Fall passieren soll. NetBeans bietet mir hier die Möglichkeit, dieses "if else if"-Konglomeratdirekt in Switch umzuwandeln, und zwar hier durch dieses Lämpchen, da steht dran: "Convert to Switch", klicke ich mal drauf ja, will ich, klick ich drauf, und jetzt sieht das so aus. Das Ganze beginnt jetzt mit dem Schlüsselwort "Switch". Danach folgt in runden Klammern die Variable oder der Ausdruck, den wir gern testen möchten. Jetzt kommt eine geschweifte Klammer auf, und danach mehrere Male das Schlüsselwort "case". Jedes Case ist ein Fall, ein Spezialfall, den ich gern testen möchte. In diesem Beispiel ist "Monat" vom Typ String, deshalb sind die "Case"-Werte auch alle Strings. Schauen wir uns zuerst einmal den Dezember an. Hier steht "Case Dezember" und dann ein Doppelpunkt. Das bedeutet, wenn "Monat" den Wert "Dezember" hat, dann führe die Anweisungen aus, die nach diesem Doppelpunkt folgen. Die Anweisungen hier lauten: Tage = 31, okay. Und dann kommt ein Break. Was bedeutet das Break? Das Break heißt, wir steigen aus dem ganzen Switch raus und machen hinter der geschweiften Klammer zu, hier unten, weiter. Das heißt, die anderen Fälle werden gar nicht mehr getestet. Es geht gleich hier unten weiter, in diesem Fall also mit "Gib Tage zurück". Wie Sie aber hier bei den anderen Monaten sehen können, gibt es offensichtlich auch die Möglichkeit, das Break ganz wegzulassen. Was passiert in einem solchen Fall? Nehmen wir z.B. an, wir geben August ein. Beim August steht jetzt hier hinter dem Doppelpunkt nichts, insbesondere steht hier kein Break. Und das bedeutet, es wird einfach mit der nächsten Zeile weitergemacht. Um das vielleicht noch etwas deutlicher zu machen, ändere ich mal die Einrückung ein wenig. Im Prinzip sieht die Sache so aus: Sie haben hier auf der rechten Seite eine Folge von Anweisungen, eine Liste von aufeinanderfolgenden Anweisungen, die untereinander stehen. Und diese "case"-Dinge hier auf der linken Seite sind Einsprung-Labels in diese Anweisungsliste auf der rechten Seite. Der Kontrollfluss sieht jetzt so aus: Es wird hier oben beim Switch begonnen, jetzt wird die Variable "monat" getestet. von oben nach unten. Ist es Januar oder ist es März oder ist es Mai usw. Nehmen wir an, es ist Juli. Im Fall von Juli gehen wir dann hier an dieser Stelle wo "case Juli" steht, rüber auf die rechte Seite. Ab da werden alle Anweisungen ausgeführt, so lange, bis wir auf einen Break stoßen oder bis wir ganz unten angekommen sind. Würde für den Fall Juli dieses Break nicht hier stehen, dann würde also zuerst diese Anweisung ausgeführt werden "tage = 31". Und danach diese Anweisung "tage = 30". Dann kommt das Break, dann wird also mit "tage = 30" das ganze Switch verlassen. Wenn wir einmal auf die rechte Seite rübergegangen sind, dann gehen wir also nie wieder auf die linke zurück. Sondern, es wird auf der rechten eine Anweisung nach der anderen ausgeführt, bis wir auf einen Break stoßen oder bis wir ganz unten angekommen sind. Nach Switch, Case und Break haben wir noch ein letztes Schlüsselwort in diesem Zusammenhang, das ist "default". Wenn keiner dieser Werte hier oben gepasst hat, also wenn "monat" weder Januar noch März, noch Mai usw. bis Februar ist, dann kommen wir hier raus. Das heißt also, in diesem Fall wird der Default-Zweig ausgeführt. Bei uns bedeutet das, es wird die Fehlermeldung ausgegeben und dann steht auch hier wieder ein Break. Das Break ist prinzipiell eigentlich nicht notwendig, denn hier ist ja sowieso Feierabend. Es ist aber keine schlechte Idee, es trotzdem immer hinzuschreiben für den Fall, dass Sie die Liste später mal erweitern wollen und hier auf der linke Seite weitere Case druntersetzen möchten, ist es eine gute Idee, hier einen Break zu haben, sonst würden ja die nachfolgenden Anweisungen auch alle mit ausgeführt werden. Zwei Dinge gibt es noch zu berücksichtigen beim Switch. Das erste ist der Typ dieser Variable oder dieses Ausdrucks hier oben. Hier dürfen Sie alle primitiven Typen verwenden außer "Long". Außerdem dürfen Sie String verwenden und Sie dürfen "Enums" verwenden. Andere Typen sind hier nicht zulässig. Die zweite Sache bezieht sich auf die Werte hinter "Case". Das müssen alles sogenannte "Compile Time Constants" sein, das heißt also, die Werte müssen zur Kompilierzeit bereits feststehen. Sie dürfen hier also keine Variablen einsetzen, sondern nur festcodierte Texte oder Zahlen sowie Konstanten. Nun wissen Sie also, wie Sie mit Switch und Case Mehrfachverzweigungen übersichtlicher programmieren können, als das mit "if else if" möglich wäre.

Java 7 Grundkurs

Machen Sie sich mit den Grundlagen der Java-Programmierung vertraut und lernen Sie die Syntax der Sprache sowie das Konzept der objektorientierten Softwareentwicklung kennen.

8 Std. 32 min (66 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!