Home > Informatik > Einführung in die OOP > 3. Kontrollstrukturen > 3.2 Switch-case-Anweisung

3.2 Switch-case-Anweisung

3.2.1 Überprüfung des Datums

Unser Projekt besteht nun schon aus einigen Klassen:

Datum

Datum enthält die grundlegenden Instanzvariablen tag, monat und jahr sowie die notwendigen Setter- und Getter-Methoden dafür. Die Setter-Methoden für tag, monat und jahr rufen dabei Korrekturmethoden aus der Klasse DatumRegeln auf. Hier ein Beispiel:

    public void setTag(int tag)
    {
        this.tag = regeln.korrigiereTag(tag,monat,jahr);
    }

Da die Klasse DatumRegeln keine statischen Methoden enthält, müssen wir stets ein Objekt dieser Klasse anlegen (hier: regeln) damit wir die Methoden der Klasse aufrufen können.

DatumRegeln

In dieser Klasse sind all die Regeln konzentriert, die wir zur Überprüfung eines Datums benötigen. Zum einen die öffentlichen Methoden

  • int korrigiereMonat()
  • int korrigiereJahre()
  • int korrigiereTag()

Zum andern die Hilfsmethoden

  • boolean istSchaltjahr()
  • int tageImMonat()

Auf die anderen Klassen - DatumTools, DatumsAusgabe, DatumFormatierer und TesteDatumTools - wollen wir an dieser Stelle nicht weiter eingehen, Thema dieser Seite ist die Überprüfung des Datums, also die Klasse DatumRegeln.

Hier zur Übersicht einmal ein BlueJ-Klassendiagramm des ganzen Projekts:

Klassendiagramm der Version 6

3.2.2 Die switch-case-Anweisung

Betrachten wir nun zwei verschiedene Versionen der Methode tageImMonat() in der Klasse DatumRegeln. Hier die große if-else-Anweisung aus einer älteren Version dieser Klasse:

Eine komplexe if-else-Anweisung mit vielen ODER-Operatoren in der Bedingung

Zunächst wird überprüft, ob es sich bei dem Monat um den Januar, den März, den Mai, den Juli, den August, den Oktober oder den Dezember handelt. Dann wird die Tageszahl auf 31 gesetzt und zurückgegeben.

Wenn es sich bei dem Monat um den Februar handelt, muss überprüft werden, ob es sich um ein Schaltjahr handelt, so dass entweder 29 oder 28 zurückgegeben wird.

In allen anderen Fällen wird einfach der Wert 30 als Ergebnis zurückgegeben. Andere Monatszahlen als 1, 2, ... , 12 können hier nicht vorkommen, dies wurde ja durch die Methode korrigiereMonat() schon sichergestellt.

Hier eine andere Version dieser Methode, statt einer komplexen if-else-Anweisung findet man hier eine einfache Reihe von 11 if-Anweisungen.

Eine Reihe von einfachen if-Anweisungen

So kann man es natürlich auch machen - Copy & Paste sei Dank. Haben Sie den ternären Operator in der zweiten if-Anweisung gesehen. Auch das ist natürlich möglich.

Jetzt wird es aber mal Zeit, etwas völlig Neues zu lernen. Betrachten Sie den folgenden Quelltext:

Hier wurde die komplexe if-else-Anweisung aus dem ersten Beispiel bzw. die lange Liste von einfachen if-Anweisungen aus dem zweiten Beispiel durch eine switch-case-Anweisung ersetzt. Lesen Sie zu diesem Thema einfach den unten verlinkten Artikel im Bereich "Begriffe und Konzepte" durch und kommen Sie dann wieder auf diese Seite.

Die switch-case-Anweisung

Auf dieser Seite erfahren Sie mehr über diese Kontrollstruktur, die Rolle des break-Befehls in der Switch-case-Anweisung und die relativ neuen switch-Ausdrücke, die direkt einen Wert zurückliefern. Auch auf das sogenannte Fall-Through-Phänomen wird hier eingegangen.

Alles Themen, die auch in der Klausur am Ende des Semesters wichtig sein könnten.

⇒ Ersetzen Sie die if-else-Anweisung in der Methode tageImMonat() durch eine switch-case-Anweisung.

⇒ Testen Sie dann, ob alles weiterhin fehlerfrei funktioniert.

⇒ Ersetzen Sie die switch-case-Anweisung durch einen switch-Ausdruck (dazu müssen Sie die oben referenzierte Seite durchgearbeitet haben).

Zum Abschluss dieser Seite noch ein paar Aufgaben für die Klausurvorbereitung

Klausurvorbereitung

Aufgabe 3.2.2 #1

Schreiben Sie eine Methode

public void arbeitszeit(String tag)

die den Namen eines Wochentags (zum Beispiel "Montag") als Parameter bekommt und mit einer switch-case-Anweisung ausgibt (System.out.println()), ob an diesem Tag gearbeitet wird oder nicht.

Am Samstag wird nur halbtags gearbeitet, an Sonntagen ist frei, und an den anderen Wochentagen ist normale Arbeitszeit.

Aufgabe 3.2.2 #2

Erstellen Sie eine Methode

public String bewertung(int note)

die einen switch-Ausdruck (also mit Pfeiloperator ->) verwendet und je nach Schulnote eine passende textliche Bewertung zurückgibt (1 = "sehr gut", 2 = "gut", ... , 6 = "ungenügend").

Für ungültige Werte soll "Ungültige Note" zurückgegeben werden.

Weitere Aufgaben

Sechs kleine Übungsaufgaben sowie eine richtig gute Klausuraufgabe finden Sie auf dem Arbeitsblatt 3-2-1-switch-case-Aufgaben, das Sie hier herunterladen können.

Seitenanfang -
weiter mit for-Schleifen ...