MINT üben

Programmieren mit Java

Zehn Grundaufgaben quer durch das Java-Kapitel — wer sie sicher löst, hat die ersten Punkte der Arbeit schon in der Tasche.

Dein Fortschritt:
0 / 0 Aufgaben
1

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.

A1
Vom Quelltext zur Ausgabe: Kinokasse
AFB I

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?

Ansatz: javac übersetzt die ganze Datei vorab in Bytecode. Die Bytecode-Datei trägt den Klassennamen und die Endung .class.
Zeilen zählen: Nur 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.

A2
Trickaufgabe — Sammelkarten gerecht verteilen
AFB I

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.

Ansatz: / zwischen zwei int-Werten ist eine Ganzzahldivision: Nachkommastellen werden abgeschnitten. % liefert den Rest.
Reihenfolge: Erst wird rechts gerechnet, dann gespeichert. Welchen Typ haben 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.

A3
for-Schleife mit if: Countdown
AFB I

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“?

Ansatz: Schreibe die Werte von i untereinander: Start 20, dann jeweils 3 weniger, solange i > 0 gilt.
Bedingung: 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):.