Verzweigungen
Bisher lief jedes deiner Programme stur von oben nach unten. Mit einer Verzweigung entscheidet das Programm selbst, welchen Weg es nimmt.
Der Ablauf als Flussdiagramm
Bevor wir programmieren, planen wir. Ein Flussdiagramm – genauer: ein Programmablaufplan – stellt den Ablauf grafisch dar.
flowchart TD
S([Start]) --> E[/alter einlesen/]
E --> B{alter >= 18?}
B -- ja --> J["Ausgabe: volljährig"]
B -- nein --> N["Ausgabe: minderjährig"]
J --> ENDE([Ende])
N --> ENDE
| Symbol | Bedeutung |
|---|---|
| abgerundetes Rechteck | Start oder Ende |
| Rechteck | eine Anweisung |
| Parallelogramm | Ein- oder Ausgabe |
| Raute | eine Bedingung – hier verzweigt sich der Ablauf |
| Pfeil | zeigt, wie es weitergeht |
Die if-else-Anweisung
if (Bedingung) {
// wird ausgeführt, wenn die Bedingung wahr ist
} else {
// wird sonst ausgeführt
}
- Die Bedingung steht in runden Klammern und ist ein Ausdruck vom Typ
boolean. - Nach der schließenden runden Klammer steht kein Semikolon.
- Der
else-Teil ist optional. - Nach der Verzweigung geht es für beide Wege gemeinsam weiter.
Vergleichsoperatoren
| Operator | Bedeutung |
|---|---|
== |
ist gleich |
!= |
ist ungleich |
< > |
kleiner, größer |
<= >= |
kleiner oder gleich, größer oder gleich |
Das doppelte Gleichheitszeichen == ist der Vergleich. Das einfache = ist die Zuweisung. Sie zu verwechseln ist der wohl häufigste Anfängerfehler.
Bei Zeichenketten gilt weiterhin: equals statt ==.
Sage ohne Rechner voraus, was das folgende Programm ausgibt. Erkläre danach, warum die Ausgabe so aussieht.
Auflösung
Ausgegeben wird:
B
C
Es handelt sich um drei einzelne, voneinander unabhängige Verzweigungen. Jede wird geprüft, egal wie die vorherige ausgegangen ist. 7 ist nicht größer als 10, aber größer als 5 und größer als 3.
Mehrere Fälle: else if
Bei einer else if-Kette wird genau ein Zweig ausgeführt – der erste, dessen Bedingung zutrifft. Alle folgenden werden dann gar nicht mehr geprüft.
Deshalb ist die Reihenfolge entscheidend. Stünde punkte >= 1 ganz oben, bekämen alle die Note 5.
Schreibe die Notenkette so um, dass sie mit der kleinsten Grenze beginnt. Was musst du an den Bedingungen ändern, damit sie trotzdem richtig arbeitet?
Auflösung
Du musst die Vergleiche umdrehen:
if (punkte < 1) {
IO.println("Note 6");
} else if (punkte < 4) {
IO.println("Note 5");
} else if (punkte < 7) {
IO.println("Note 4");
} ...
Beide Fassungen sind korrekt. Die erste liest sich für die meisten natürlicher, weil sie mit der besten Note beginnt.
Die switch-Anweisung
Wenn du einen Wert gegen mehrere feste Möglichkeiten prüfst, gibt es eine kompaktere Schreibweise.
In diesem Programm steckt Absicht: Bei einem case fehlt das break.
a) Finde ihn und sage voraus, was bei der Eingabe 3 passiert.
b) Probiere es aus und repariere den Fehler.
Auflösung
Bei case 3 fehlt das break. Die Eingabe 3 gibt deshalb aus:
befriedigend
ausreichend
Ohne break läuft die Ausführung einfach in den nächsten Fall hinein. Das nennt man Durchfallen. Meistens ist es ein Fehler – gelegentlich nutzt man es absichtlich, um mehrere Fälle gleich zu behandeln.
default fängt alle Werte ab, für die es keinen case gibt.
Aufgabe 1: Größte von drei Zahlen
Schreibe ein Programm, das drei Zahlen einliest und die größte ausgibt.
a) Entwickle zuerst auf Papier ein Flussdiagramm.
b) Setze es danach um.
Tipp 1: Nicht alle Fälle auf einmal
Fang mit zwei Zahlen an: Merke dir die größere in einer Variablen groesste. Vergleiche dann diese eine Variable mit der dritten Zahl.
Tipp 2: Das Gerüst
int groesste = a;
if (b > groesste) {
groesste = b;
}
// und jetzt dasselbe noch einmal mit c
Dieses Muster – „merke dir den bisher besten Wert und vergleiche weiter“ – begegnet dir in Kapitel 5 und 7 wieder.
Aufgabe 2: Schaltjahr
Ein Jahr ist ein Schaltjahr, wenn es durch 4 teilbar ist – außer es ist durch 100 teilbar, dann ist es keines – außer es ist durch 400 teilbar, dann doch.
Schreibe ein Programm, das ein Jahr einliest und ausgibt, ob es ein Schaltjahr ist.
Teste mit 2024 (ja), 1900 (nein), 2000 (ja) und 2023 (nein).
Tipp 1: Teilbarkeit prüfen
jahr % 4 == 0 ist wahr, wenn jahr ohne Rest durch 4 teilbar ist.
Tipp 2: Die Reihenfolge der Regeln
Die Regeln sind ineinander verschachtelt. Prüfe von der speziellsten zur allgemeinsten: erst durch 400, dann durch 100, dann durch 4.
Zusatzaufgabe
Erweitere den Zeitrechner aus Kapitel 2 so, dass er sprachlich sauber ausgibt:
- bei 0 Sekunden: „keine Zeit“
- bei weniger als einer Minute: nur die Sekunden
- bei weniger als einer Stunde: nur Minuten und Sekunden
- sonst: Stunden, Minuten und Sekunden
Und wenn du magst: Setze auch die Einzahl richtig („1 Minute“ statt „1 Minuten“).