Check-in: Wo stehst du?
Zwischen den Grundlagen der Programmierung mit Java und dieser Seite liegen die Sommerferien. Sechs Wochen ohne Java – das merkt man, und das ist völlig normal. Bevor es mit Polymorphie, Rekursion und dynamischen Datenstrukturen weitergeht, sortierst du deshalb einmal, was noch sitzt.
Der Check-in wird nicht bewertet. Er ist kein Test, sondern eine Standortbestimmung: Danach weißt du, welche zwei oder drei Seiten aus dem Grundlagen-Lernpfad du noch einmal aufschlagen solltest – und deine Lehrkraft weiß es auch.
Nichts zu können ist hier kein Problem. Nicht zu wissen, was man nicht kann, ist eines: Die Erweiterungen bauen ohne Umweg auf den Grundlagen auf. Wer jetzt eine Lücke findet, schließt sie in einer halben Stunde. Wer sie erst im Halbjahr findet, schleppt sie mit.
Die Regel aus dem Grundlagen-Lernpfad gilt weiter: Erst denken, dann Rechner. In Teil 1 sagst du auf Papier voraus, was passiert, und führst das Programm erst danach aus. Wenn Vorhersage und Ergebnis auseinandergehen, hast du gerade die wichtigste Information des ganzen Check-ins bekommen.
So gehst du vor
- Teil 1 – Lesen (drei Aufgaben, auf Papier). Programme verstehen, ohne sie laufen zu lassen.
- Teil 2 – Schreiben (drei Aufgaben, in der Online-IDE). Für jede Aufgabe liegen Tests bereit: Über den Reiter Testrunner siehst du selbst, ob deine Lösung stimmt.
- Teil 3 – Auswerten. Du trägst ein, was geklappt hat, und findest die Seite, auf der das Fehlende steht.
- Selbsttest am Ende – zehn kurze Fragen quer durch alles.
Die Lösungen stehen unter einem Passwort. Sieh dort erst nach, wenn du die Aufgabe wirklich versucht hast – sonst misst der Check-in nichts.
Teil 1: Lesen
Aufgabe 1: Was gibt das Programm aus?
Ohne Rechner. Führ eine Tabelle mit den Spalten zahl und summe und trag für jeden Schleifendurchlauf ein, welche Werte darin stehen.
void main() {
int zahl = 2708;
int summe = 0;
while (zahl > 0) {
summe = summe + zahl % 10;
zahl = zahl / 10;
}
IO.println(summe);
}
a) Was gibt das Programm aus?
b) Was berechnet es allgemein – also für eine beliebige positive Zahl?
c) Was passiert, wenn zahl zu Beginn den Wert 0 hat?
d) Jemand vertauscht die beiden Zeilen im Schleifenrumpf. Was wird dann ausgegeben? Sag es voraus, bevor du es ausprobierst.
Tipp: die beiden Rechenzeichen
zahl % 10 liefert den Rest bei der Division durch 10 – also die letzte Ziffer. zahl / 10 ist eine Ganzzahldivision: Sie schneidet die letzte Ziffer ab. Zusammen ergeben die beiden Zeilen ein Verfahren, das eine Zahl Ziffer für Ziffer abbaut.
Aufgabe 2: Vier Ausschnitte, vier Fehler
In jedem Ausschnitt steckt genau ein Fehler. Beschreibe für jeden: Was ist falsch, was passiert dadurch, und wie berichtigst du es?
// a)
String eingabe = IO.readln("Passwort: ");
if (eingabe == "geheim") {
IO.println("Willkommen!");
}
// b)
int[] werte = {3, 7, 2, 9};
for (int i = 0; i <= werte.length; i++) {
IO.println(werte[i]);
}
// c)
int mittelwert(int[] pWerte) {
int summe = 0;
for (int wert : pWerte) {
summe = summe + wert;
}
}
// d)
int rest = 10;
while (rest > 0) {
IO.println("Noch " + rest);
rest = rest + 1;
}
Und die eigentliche Frage: Welche der vier Fehler meldet die IDE – und wann? Sortiere sie in drei Gruppen: beim Übersetzen, beim Ausführen, gar nicht.
Aufgabe 3: Objekte und Vererbung lesen
Ohne Rechner. Lies die vier Dateien und beantworte:
a) Was gibt das Programm aus? Schreib die drei Zeilen auf.
b) Die Methode stelleVor steht nur in Tier. Warum erscheint bei Bello trotzdem „Wuff"?
c) Warum kann Hund nicht einfach this.name schreiben?
d) Was bewirkt super(pName) – und was passiert, wenn man die Zeile streicht?
Führ das Programm erst danach aus.
Tipp zu b)
stelleVor ruft this.laut() auf. Die Frage ist nicht, in welcher Klasse die Methode steht, sondern welches Objekt hinter this steckt.
Teil 2: Schreiben
Ab hier arbeitest du am Rechner. Jede Aufgabe bringt Tests mit: Schreib deine Lösung, öffne den Reiter Testrunner und starte ihn. Die Meldung neben einem roten Test sagt dir, was erwartet wurde.
Aufgabe 4: Zahlenspiele
Ergänze die drei Methoden in Zahlenspiele, bis alle Tests grün sind. Die Kommentare über den Methoden sagen genau, was sie leisten sollen – auch für die Sonderfälle.
Tipp 1: quersumme
Das Verfahren steht in Aufgabe 1. Lass die übergebene Zahl unangetastet und arbeite mit einer eigenen Variablen:
int rest = pZahl;
Tipp 2: istPrimzahl
Fang die Zahlen unter 2 mit einem eigenen if ab und gib sofort false zurück. Danach probierst du in einer Zählschleife alle Teiler von 2 bis pZahl - 1 durch. Findest du einen, der pZahl % teiler == 0 erfüllt, kannst du sofort return false; schreiben – der Rest der Schleife bringt nichts mehr. Erst nach der Schleife steht return true;.
Tipp 3: treppe
Zwei verschachtelte Schleifen: Die äußere zählt die Zeilen von 1 bis pHoehe, die innere hängt so viele Sterne an, wie die Zeilennummer angibt. Nach der inneren Schleife kommt der Umbruch:
ergebnis = ergebnis + "\n";
Aufgabe 5: Statistik über einem Feld
Ergänze die vier Methoden der Klasse Statistik, bis alle Tests grün sind.
Bei mittelwert lohnt sich ein zweiter Blick auf den Rückgabetyp.
Tipp 1: maximum
Der beliebteste Fehler ist, mit int groesstes = 0; zu starten. Bei lauter negativen Werten kommt dann 0 heraus – ein Wert, der im Feld gar nicht vorkommt. Nimm stattdessen den ersten Wert des Feldes als Startwert und vergleiche ab Index 1.
Tipp 2: mittelwert
summe(pWerte) / pWerte.length sind zwei int-Werte – Java rechnet dann eine Ganzzahldivision und wirft den Rest weg. Aus 3 geteilt durch 2 wird 1, nicht 1,5. Eine der beiden Zahlen muss vorher zur Kommazahl werden:
(double) summe(pWerte) / pWerte.length
Aufgabe 6: Eine Klasse und eine Unterklasse
Spielstand merkt sich, wie viele Punkte jemand gesammelt hat. Profistand ist ein Spielstand, bei dem jeder Punkt doppelt zählt.
Ergänze beide Klassen, bis alle Tests grün sind. Denk an das Geheimnisprinzip: Die Attribute sind private, und Profistand kommt nur über die öffentlichen Methoden an sie heran.
Der Konstruktor von Profistand ist schon fertig – er besteht aus einer einzigen Zeile. Beantworte nebenbei: Warum steht dort keine Zuweisung, und warum ist das kein Versehen?
Tipp 1: nie unter 0
Zwei Wege führen zum Ziel. Entweder du prüfst vorher, ob genug Punkte da sind, oder du ziehst ab und korrigierst danach nach oben:
if (this.punkte < 0) {
this.punkte = 0;
}
Tipp 2: Profistand
Der fertige Konstruktor reicht den Namen an die Oberklasse weiter – dort steht das Attribut. Und punkteDazu muss das Zählen nicht neu schreiben: Es kann die geerbte Fassung mit dem doppelten Wert aufrufen.
super.punkteDazu(...);
Teil 3: Wo stehe ich?
Geh die Tabelle Zeile für Zeile durch und kreuze ehrlich an. Für jede Zeile, die du nicht ankreuzen kannst, steht rechts die Seite, auf der es steht – ein bis zwei davon aufzuarbeiten, ist ein realistisches Programm für diese Woche.
| Das kann ich | Wenn nicht: hier steht es | |
|---|---|---|
| ☐ | Ich kann ein Programm auf Papier Schritt für Schritt verfolgen. | 1.4 Rückblick |
| ☐ | Ich kenne den Unterschied zwischen Ganzzahldivision und Kommadivision und weiß, wozu Modulo gut ist. | 1.2 Rechnen |
| ☐ | Ich wähle den passenden Datentyp und weiß, was eine Typumwandlung bewirkt. | 2.2 Datentypen |
| ☐ | Ich vergleiche Zeichenketten immer mit equals. |
2.4 Zeichenketten |
| ☐ | Ich schreibe Verzweigungen und logische Ausdrücke sicher. | 3.1 Verzweigungen |
| ☐ | Ich wähle zwischen while und for und erkenne eine drohende Endlosschleife. |
3.4 Zählschleifen |
| ☐ | Ich kann verschachtelte Schleifen lesen und schreiben. | 3.6 Verschachtelte Schleifen |
| ☐ | Ich schreibe Methoden mit Parametern und Rückgabewert. | 4.2 Rückgabewerte |
| ☐ | Ich zerlege ein Problem in Methoden, statt alles in eine zu schreiben. | 4.3 Modularisierung |
| ☐ | Ich durchlaufe ein Feld richtig und kenne den Zaunpfahlfehler. | 5.2 Felder durchlaufen |
| ☐ | Ich bestimme Summe, Maximum und Anzahl in einem Durchlauf. | 5.3 Felder verändern |
| ☐ | Ich schreibe eine Klasse mit Attributen, Konstruktor und Methoden. | 6.1 Klassen und Objekte |
| ☐ | Ich kann erklären, warum Attribute private sind. |
6.2 Geheimnisprinzip |
| ☐ | Ich bilde mit extends eine Unterklasse, rufe super(...) auf und überschreibe eine Methode. |
6.4 Vererbung |
| ☐ | Ich kann die lineare Suche und ein Sortierverfahren erklären und umsetzen. | 7.2 Lineare Suche |
Zwei Dinge zum Mitnehmen, egal wie es gelaufen ist.
Die Hälfte der Fehler in Aufgabe 2 meldet die IDE nicht. Ein Programm, das startet, ist nicht dasselbe wie ein Programm, das stimmt – deshalb liegen in diesem Lernpfad bei fast jeder Aufgabe Tests dabei.
Und in Aufgabe 3 und 6 hast du schon gesehen, worum es gleich in Kapitel 1 geht: Ein geerbtes Verfahren ruft die überschriebene Methode auf, und derselbe Aufruf tut bei verschiedenen Objekten Verschiedenes. Das hat einen Namen, und den lernst du in 1.2 Polymorphie.
Wenn du magst, kannst du direkt weitermachen: 1. Vertiefte Objektorientierung.