Übungsaufgaben
Zehn Übungen zum Klicken, Ziehen und Knobeln — von AFB I bis AFB III. Jede Übung gibt dir sofort Rückmeldung; wenn du hängst, helfen dir die gestuften Tipps.
Eine App prüft den Zustand deines Handys. Welche Bedingungen sind wahr?
int akku = 15; boolean ladekabel = false; String modus = "Spiel";
akku <= 15 ist wahr — verneint also falsch. && braucht beide Seiten wahr; weil ladekabel false ist, wird ladekabel && … sofort falsch. equals vergleicht Texte Zeichen für Zeichen, auch die Groß-/Kleinschreibung: „spiel“ ≠ „Spiel“.!, dann &&.!ladekabel bedeutet „nicht ladekabel“ — also true, weil ladekabel false ist.Welche Java-Zeile entspricht der Python-Zeile?
and → &&, or → ||, not → !, elif → else if. Die Bedingung steht in Java immer in runden Klammern, der Block in geschweiften. Bei range(a, b, s) wird b nie erreicht — daher i < b, nicht i <= b.Ein Spiel soll so lange nach dem Passwort fragen, bis es richtig eingegeben wurde. Finde mit dem Entscheidungsbaum die passende Struktur.
while (!eingabe.equals(passwort)). Faustregel: Ist die Anzahl der Wiederholungen bekannt (10 Runden, 7 Tage), nimm for; hängt sie von etwas ab, das erst beim Ausführen passiert, nimm while.Kinder unter 6 Jahren sind frei. Am Kinotag (Dienstag) zahlen alle anderen 5 €. Sonst zahlen Jugendliche unter 18 Jahren 7 € und Erwachsene 10 €. Ergänze — zwei Bausteine bleiben übrig.
(alter < 6) {
preis = 0;
} (tag.("Dienstag")) {
preis = 5;
} else if (alter 18) {
preis = 7;
} {
preis = 10;
}
elif ist Python, in Java heißt es else if. == bleibt übrig, weil Texte mit equals verglichen werden: == prüft bei Strings nur, ob es dasselbe Objekt ist — das kann bei einem eingelesenen „Dienstag“ falsch sein, obwohl die Buchstaben gleich sind. Die Reihenfolge der Zweige ist wichtig: Java nimmt den ersten passenden. Stünde die Dienstags-Prüfung vor alter < 6, müssten Kleinkinder dienstags zahlen.Mo legt jede Woche 15 € ins Sparschwein, bis mindestens 100 € drin sind.
int gespart = 0;
int wochen = 0;
while (gespart < 100) {
gespart += 15;
wochen++;
}
System.out.println(wochen);
Welche Zahl wird ausgegeben?
Sortiere die Schleifenköpfe danach, wie oft der Rumpf ausgeführt wird. Im Rumpf der for-Schleifen wird i nicht verändert.
k bleibt 0, 0 * 2 bleibt 0) oder die Bedingung nie falsch wird: i springt 0, 2, 4, 6 … und ist nie genau 5. Deshalb ist < sicherer als !=.Das Programm soll 10, 9, 8, … 1 untereinander ausgeben und danach „Los!“. Bring die Zeilen in die richtige Reihenfolge.
int t = 10;
while (t > 0) {
System.out.println(t);
t--;
}
System.out.println("Los!");
t--; vor der Ausgabe, erschiene 9, 8, … 0. Und „Los!“ muss hinter der schließenden Klammer stehen — sonst würde es zehnmal ausgegeben. Genau das zeigt Java nur über die Klammern, nicht über die Einrückung.Eine Spielfigur springt in Dreierschritten über ein Brett mit 20 Feldern. Auf geraden Feldern gibt es Punkte, auf ungeraden Feldern ab 11 einen Treffer.
int summe = 0;
int treffer = 0;
for (int i = 1; i <= 20; i += 3) {
if (i % 2 == 0) {
summe += i;
} else if (i > 10) {
treffer++;
}
}
- Wie oft wird der Schleifenrumpf ausgeführt? -mal
-
Wert von
summenach der Schleife -
Wert von
treffernach der Schleife -
Transfer: Die Bedingung wird zu
i < 19geändert. Wie oft läuft der Rumpf jetzt? -mal
i nimmt die Werte 1, 4, 7, 10, 13, 16, 19 an — 7 Durchläufe (22 wäre zu groß). Gerade: 4 + 10 + 16 = 30. Ungerade und größer als 10: 13 und 19, also 2 Treffer — 1 und 7 sind ungerade, aber zu klein. Wichtig: Ein gerades Feld über 10 (16) zählt nicht als Treffer, weil der else if-Zweig nur geprüft wird, wenn der erste falsch war. Mit i < 19 fällt genau der letzte Wert 19 weg.Hier treffen Bedingungen auf die Datentypen aus 1.1.2. Es gilt: int a = 7; double b = 3.5; String s = "7"; Ist die Bedingung wahr, falsch — oder meldet javac einen Fehler?
| Bedingung | wahr | falsch | Fehler |
|---|---|---|---|
a / 2 == b |
|||
a / 2.0 == b |
|||
s.equals("7") |
|||
a == s |
|||
a % 2 == 1 && b > 3 |
|||
!(a > 5) || b < 3 |
|||
if (b = 7) |
a / 2 ist Ganzzahldivision (3), und 3 ≠ 3.5. Mit 2.0 stimmt es. Eine Zahl und einen Text kann man nicht mit == vergleichen („bad operand types for binary operator '=='“) — anders als in Python, wo einfach False herauskäme. b = 7 ist eine Zuweisung, kein Vergleich; ihr Ergebnis ist ein double und keine Bedingung („double cannot be converted to boolean“).Ein Trainingsprogramm soll 10 Runden zählen. Genau hinsehen!
int runden = 0;
for (int i = 0; i < 10; i++); {
runden++;
}
System.out.println(runden);
Welche Zahl wird ausgegeben? Trage −1 ein, falls javac einen Fehler meldet.
{ runden++; } ist danach ein ganz normaler Block, der genau einmal ausgeführt wird. javac meldet keinen Fehler, weil beides erlaubt ist. Merke: Hinter for (…), while (…) und if (…) steht nie ein Semikolon.