Oft soll ein bestimmter Programmteil nur ausgeführt werden, wenn eine Bedingung erfüllt ist, z.B.
Für diese Zwecke gibt es die if-Anweisung.
Der Benutzer gibt eine PIN ein. Das Programm prüft, ob die PIN korrekt ist (1372) und gibt in diesem Fall „PIN korrekt!“ aus. Hier die Ausgaben zweier Programmläufe:
Geben Sie bitte Ihre PIN ein: 1221 Programmende.
Geben Sie bitte Ihre PIN ein: 1372 Die PIN ist korrekt! Programmende.
Benutzereingaben
Die Anweisung int pe = Input.readInt(„Bitte geben Sie die PIN ein:“);
nimmt vom Benutzer eine Zahl entgegen und legt sie in der Variable pe ab.
Detailinfo:
readInt
ist eine statische Methode der Klasse Input
. Mehr zu Klassen und statischen Methoden später!
Mit dem Schlüsselwort if
weist man den Computer an, etwas nur dann zu tun, wenn eine bestimmte Bedingung erfüllt ist.
if(Bedingung){ Anweisungen }
führt die Anweisungen nur dann aus, wenn die Bedingung zutrifft (genauer: wenn der Term Bedingung
den Wert true
hat).
Falls die falsche PIN eingegeben wird, soll eine entsprechende Meldung ausgegeben werden:
Geben Sie bitte Ihre PIN ein: 1221 Die PIN ist nicht korrekt! Programmende.
Die if
-Anweisung kann mittels else
um einen weiteren Block ergänzt werden, der nur dann ausgeführt wird, wenn die Anweisung nicht zutrifft:
if(Bedingung){ Anweisungen für den Fall, dass die Bedingung zutrifft } else { Anweisungen für den Fall, dass die Bedingung NICHT zutrifft }
Erweitere das Programm, so dass es dem Benutzer drei Eingabeversuche zugesteht und jeweils ausgibt, wie viele Versuche er noch hat. Zwei mögliche Programmabläufe sehen also so aus:
Noch 3 Versuche Sie haben eingegeben: 5654 falsche PIN! Noch 2 Versuche Sie haben eingegeben: 4432 falsche PIN! Noch 1 Versuche Sie haben eingegeben: 8983 falsche PIN! Programmende.
Noch 3 Versuche Sie haben eingegeben: 2674 falsche PIN! Noch 2 Versuche Sie haben eingegeben: 1372 Die PIN ist korrekt! Programmende.
Ob eine Zahl durch 2, 3, 4, 5 oder 9 teilbar ist, lässt sich durch einfache Teilbarkeitsregeln leicht ermitteln. Aber ist beispielsweise 534 durch 17 teilbar? Wir entwickeln ein kleines Programm, das uns hilft, das herauszufinden.
Der Modulo-Operator
Der Modulo-Operator ($mod$) ermittelt den Rest einer Division. Es ist beispielsweise $11 \mod 4 = 3$, weil 11 beim Teilen durch 4 den Rest 3 lässt ($11 = 4 \cdot 2 + 3$). In Java wird für den Modulo-Operator das Prozentzeichen '%' verwendet. Wenn wir also prüfen wollen, ob der Wert der Variable 'z' durch 17 teilbar ist (also beim Teilen durch 17 den Rest 0 lässt), schreiben wir:
if(z % 17 == 0){ println("Die Zahl ist in der Tat durch 17 teilbar!"); }
Bemerkung: Du erinnerst Dich sicher an den Vergleichsoperator '==' (nicht zu verwechseln mit dem Zuweisungsoperator '=').
Erweitere das Programm oben so, dass es prüft, ob die eingegebene Zahl durch 2, 3, 4, …, 10 teilbar ist und entsprechende Meldungen ausgibt.
Hier geht's zur Lösung!
Die Einmaleinstabelle aus dem Kapitel über geschachtelte Schleifen sah noch nicht perfekt aus, da die Zeilen in der Ausgabe unterschiedlich lang waren:
1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100
Ihr seht sicher gleich, woran es liegt: Die einstelligen Zahlen sind nur halb so breit wie die zweistelligen. Wir können das Problem beheben, indem wir nach allen einstelligen Zahlen zusätzlich ein Leerzeichen ausgeben.
Erweitere das Programm oben so, dass alle Zahlen auf der Diagonale (1, 4, 9, …) in der Farbe Color.red
ausgegeben werden!
Hier geht's zur Lösung!
Wir schreiben ein Programm, das die Zahlen von 1 bis 300 ausgibt, wobei alle durch 5 teilbaren Zahlen grün geschrieben werden sollen.
Erweitere das Programm oben so, dass es nicht nur jede fünfte Zahl grün färbt, sondern (davon abweichend!) zudem jede 10. Zahl rot.
Hier geht's zur Lösung!
Erstelle ein Programm, das den Benutzer um Eingabe eines Monats als Zahl bittet (1 == Jan, 2 == Feb, …) und die Anzahl der Tage in diesem Monat ausgibt (noch ohne Schaltjahre).
Erweitere das Programm oben so, dass es den Benutzer zusätzlich zur Eingabe der Jahreszahl auffordert und bei der Antwort berücksichtigt, ob es sich um ein Schaltjahr handelt.
Vorsicht: Wenn Du denkst, jedes 4. Jahr sei ein Schaltjahr, muss ich Dich enttäuschen. Die Schaltjahresregel ist etwas umfangreicher.
Hier geht's zur Lösung!
Programmidee:
Der Computer soll sich eine zufällige ganze Zahl zwischen 1 und 100 ausdenken und der Benutzer soll versuchen, sie zu erraten. Dazu hat er beliebig viele Versuche. Nach jedem Rateversuch informiert der Computer ihn darüber, ob die eingegebene Zahl zu groß, zu klein oder genau richtig war.
Probiere das Programm erst einmal aus und versuche, die Anweisungen zu verstehen. Eine Erklärung der Anweisung in Zeile 1 folgt unten.
Erzeugen von Zufallszahlen
Die Funktion Math.random()
erzeugt bei jedem Aufruf eine neue Zufallszahl im Intervall $[0;1[$. Durch Multiplikation mit 100 erhalten wir eine zufällige Zahl im Intervall $[0;100[$, die durch die Funktion Math.floor()
abgerundet wird. Es entsteht eine zufällige ganze Zahl aus der Menge $\{0; 1; 2; \ldots; 99\}$. Zu dieser zählen wir $1$ dazu, so dass wir insgesamt eine zufällige Zahl aus der Menge $\{1; 2; 3; \ldots; 100\}$ bekommen.
Insgesamt: int zahl = Math.floor(Math.random() * 100) + 1;
Erweitere das Programm oben so, dass es am Ende ausgibt, wie viele Versuche der Benutzer gebraucht hat.
Bemerkung: Zur Lösung dieser Aufgabe braucht man natürlich keine if
-Anweisung.
Hier geht's zur Lösung!
Der Eintritt ins Schwimmbad Kleinschwabhausen wird nach folgender Tabelle ermittelt:
Alter | Eintrittspreis |
---|---|
unter 7 Jahren | kostenlos |
7 - 17 Jahre | 2,00 € |
18 - 60 Jahre | 3,00 € |
über 60 Jahre | 2,50 € |
Schreibe ein Programm, das das Alter des Benutzers erfragt und abhängig davon den korrekten Eintrittspreis ausgibt.
Schreibe ein Programm, das den Benutzer auffordert, zwei Zahlen einzugeben und das diese zwei Zahlen dann sortiert ausgibt.
Schreibe ein Programm, das den Benutzer auffordert, drei Zahlen einzugeben und das anschließend die kleinste der drei Zahlen ausgibt.
Schreibe ein Programm, das den Benutzer auffordert, eine Zahl einzugeben. Das Programm prüft dann, ob es sich um eine Primzahl handelt, indem es prüft, ob die Zahl durch eine der Zahlen 2, 3, …, Zahl – 1 teilbar ist. Am Ende teilt schreibt das Programm „Die eingegebene Zahl ist eine Primzahl.“ oder „Die eingegebene Zahl ist keine Primzahl.“
Für die Schnellen unter Euch: Es würde reichen, die Teilbarkeit durch deutlich weniger Zahlen zu prüfen. Optimiere das Programm, so dass es schneller läuft!
Der Benutzer denkt sich eine ganze Zahl zwischen 1 und 100. Der Computer rät und gibt seinen Tipp am Bildschirm aus. Dann fragt er den Benutzer, ob er richtig geraten hat. Ist die Zahl des Computers zu klein, so gibt der Benutzer 1 ein. Ist sie zu groß, so gibt er 2 ein. Stimmt sie, so gibt er 3 ein.
Es folgen weitere Rateversuche des Computers und Antworten des Benutzers, bis der Computer die Zahl erraten hat.
Überlege Dir eine möglichst gute Ratestrategie für den Computer und programmiere sie dann!