Aufgabenblock — AFB I
Zehn Standardaufgaben zum Reproduzieren, bunt gemischt aus allen elf Unterkapiteln: Programme Zeile für Zeile verfolgen, Typen und Werte angeben, Klassenkarten zeichnen, Arrays und Listen auslesen. Das sind die sicheren Punkte in jeder Arbeit — eine der zehn Aufgaben ist allerdings eine Trickaufgabe.
Das Programm einer Kinokasse liegt in der Datei Kinokasse.java:
public class Kinokasse {
public static void main(String[] args) {
System.out.print("Saal ");
System.out.println(3);
System.out.print("Reihe ");
System.out.print(7);
System.out.println(", Platz 12");
System.out.println("Viel Spaß im Film!");
}
}
Nenne den Befehl zum Übersetzen, den Namen der Datei, die dabei entsteht, und den Befehl zum Starten. Wie viele Zeilen erscheinen in der Konsole?
javac übersetzt die ganze Datei vorab in Bytecode. Die Bytecode-Datei trägt den Klassennamen und die Endung .class.println beendet die Zeile. print schreibt in derselben Zeile weiter.Vollständige Lösung
Übersetzen: javac Kinokasse.java → es entsteht Kinokasse.class (Bytecode). Starten: java Kinokasse — ohne Endung, die JVM führt den Bytecode aus.
Ausgabe (3 Zeilen):
Saal 3 Reihe 7, Platz 12 Viel Spaß im Film!
Wer 5 Zeilen zählt, hat jedes print als eigene Zeile gewertet.
Fünf Freunde teilen 47 Sammelkarten gleichmäßig auf. Außerdem will das Programm wissen, was „die Hälfte aller Karten“ ist.
int karten = 47; int spieler = 5; int proKopf = karten / spieler; int rest = karten % spieler; double haelfte = karten / 2;
Berechne die Werte der drei Variablen, so wie Java sie speichert.
/ zwischen zwei int-Werten ist eine Ganzzahldivision: Nachkommastellen werden abgeschnitten. % liefert den Rest.karten und 2? Das Umwandeln in double passiert erst danach.Vollständige Lösung
47 / 5 → 9 (9 · 5 = 45), 47 % 5 → 2 Karten bleiben übrig.
Die Falle: karten / 2 ist int / int = 23. Erst dieses Ergebnis wird automatisch zu double erweitert: haelfte = 23.0, nicht 23.5. Richtig wäre karten / 2.0 oder (double) karten / 2.
Ein Modellraketen-Club zählt beim Start in Dreierschritten herunter:
int durchlaeufe = 0;
for (int i = 20; i > 0; i -= 3) {
if (i % 2 == 0) {
System.out.println(i + " gerade");
} else {
System.out.println(i);
}
durchlaeufe++;
}
System.out.println("Start!");
Wende die Schleife Schritt für Schritt an: Wie oft läuft sie, welche Zahl steht in der letzten Zahlenzeile, und wie viele Zeilen enden mit „gerade“?
i untereinander: Start 20, dann jeweils 3 weniger, solange i > 0 gilt.i % 2 == 0 ist genau dann wahr, wenn i ohne Rest durch 2 teilbar ist.Vollständige Lösung
i durchläuft 20, 17, 14, 11, 8, 5, 2 → 7 Durchläufe. Danach wäre i = −1, die Bedingung i > 0 ist falsch. Letzte Zahl: 2.
Gerade sind 20, 14, 8 und 2 → 4 Zeilen mit „gerade“. In Python hieße der Kopf for i in range(20, 0, -3):.
