Den Bauplan nie gesehen und trotzdem sicher benutzt: Wer Dokumentationen lesen kann, arbeitet mit String, Datum und Co. wie mit eigenen Klassen.
Dein Fortschritt:
0 / 0 Aufgaben
1
Ü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.
A1
Eine Dokumentation lesen: Lose für die Tombola
AFB I
Für die Tombola beim Schulfest sollen Losnummern ausgelost werden. Du bekommst die Klasse Zufallsgenerator ohne Quelltext — nur mit dieser Dokumentation:
Zufallsgenerator
c Zufallsgenerator(min: Ganzzahl, max: Ganzzahl)
+ naechsteZahl(): Ganzzahl
+ setBereich(min: Ganzzahl, max: Ganzzahl)
+ getMin(): Ganzzahl
+ getMax(): Ganzzahl
Zufallsgenerator(min, max) — erzeugt einen Generator für ganze Zahlen von min bis max (beide einschließlich).
naechsteZahl() — liefert eine zufällige ganze Zahl aus dem aktuellen Bereich.
setBereich(min, max) — legt einen neuen Bereich fest.
getMin(), getMax() — liefern die aktuellen Grenzen.
Welche Aussagen stimmen?
Mehrere Antworten sind richtig. Markiere alle zutreffenden und klicke dann auf „Prüfen“.
Eine Dokumentation beschreibt die Schnittstelle: Konstruktoren und öffentliche Methoden mit Parametern und Rückgabetypen. Private Attribute sind absichtlich nicht aufgeführt — irgendwo muss der Generator seine Grenzen ja speichern, sonst könnte getMin() nichts liefern. Methoden ruft man an einem Objekt auf, also erst Zufallsgenerator z = new Zufallsgenerator(1, 300); und dann z.naechsteZahl(). setBereich hat keinen Rückgabetyp, ist also ein Auftrag.
Ansatz: Lies zu jeder Methode, ob ein Rückgabetyp dasteht und welche Parameter sie braucht.
Weiter: Eine Methode ohne Rückgabetyp liefert nichts zurück. Und Methoden werden an einem Objekt aufgerufen, nicht am Klassennamen.
A2
Was liefert die Methode? — Wangerooge
AFB I
Die Klasse String ist in Java schon fertig dokumentiert. Gegeben ist String ort = "Wangerooge"; Ordne jeden Aufruf nach dem Typ seines Rückgabewerts.
Ziehe jede Karte in den passenden Korb — oder wähle sie mit Enter aus und drücke dann die Ziffer des Korbs (0 legt sie zurück).
1int
2char
3String
4boolean
Aus der Dokumentation: length() und indexOf(s) liefern eine Ganzzahl (Länge bzw. Position), charAt(i) ein einzelnes Zeichen, substring und toUpperCase eine neue Zeichenkette, equals einen Wahrheitswert. Typischer Fehler: charAt zu String legen — es liefert ein char wie 'W' (einfache Anführungszeichen), keinen String "W". Bei geschachtelten Aufrufen entscheidet die äußerste Methode über den Typ.
Ansatz: Frage bei jedem Aufruf: Was bekomme ich zurück — eine Zahl, ein Zeichen, einen Text oder wahr/falsch?
Weiter: Bei ort.charAt(ort.length() - 1) wird zuerst length() ausgewertet; zurückgegeben wird aber das Ergebnis von charAt.
A3
Indizes im Leuchtturm
AFB I
Gegeben ist String wort = "Leuchtturm"; Setze die passenden Werte und Methoden ein — ein Kärtchen bleibt übrig.
Wort anklicken, dann Lücke anklicken (oder umgekehrt) — mit Tab und Enter geht es genauso. Ein Klick auf eine gefüllte Lücke legt das Wort zurück.
wort.length() liefert . Das erste Zeichen hat den Index , das letzte Zeichen 'm' den Index . wort.substring(0, 6) liefert . Ob wort denselben Text enthält wie eine andere Zeichenkette, prüft man mit der Methode .
"Leuchtt" bleibt übrig — es wäre das Ergebnis, wenn substring(0, 6) das Zeichen mit Index 6 noch mitnehmen würde. Die Dokumentation sagt aber: substring(a, b) liefert die Zeichen von Index a bis ausschließlich b, also 6 − 0 = 6 Zeichen. Weil die Zählung bei 0 beginnt, hat das letzte Zeichen den Index length() − 1 = 9.
Ansatz: Zähle die Buchstaben und nummeriere sie von 0 an durch.
Weiter: substring(0, 6) liefert genau 6 Zeichen: die mit Index 0 bis 5.
A4
Stimmt's? — Emden
AFB II
Gegeben ist String stadt = "Emden"; und direkt danach die Anweisung stadt.toUpperCase();
Fünf Aussagen nacheinander. Eine falsche Einschätzung reicht — dann startest du die Serie mit „Neue Runde“ neu.
Aussage 1 von 5
Zeichenketten sind in Java unveränderlich: Methoden wie toUpperCase() oder substring() liefern immer eine neue Zeichenkette. Wer das Ergebnis behalten will, muss es zuweisen: stadt = stadt.toUpperCase();
Ansatz: Schreibe Emden auf und nummeriere die Zeichen von 0 an.
Weiter: Keine String-Methode verändert den ursprünglichen String — sie liefern ihr Ergebnis als Rückgabewert.
A5
Ein Dateiname wird zerlegt
AFB II
Eine Foto-App untersucht den Dateinamen String datei = "ferien_foto.png"; Verbinde jeden Aufruf mit seinem Rückgabewert.
Klicke links einen Eintrag an und dann rechts den passenden — es entsteht eine Verbindungslinie. Mit der Tastatur: Enter zum Auswählen, ↑/↓ zum Wandern.
Durchnummeriert: f0 e1 r2 i3 e4 n5 _6 f7 o8 t9 o10 .11 p12 n13 g14 — also 15 Zeichen. indexOf liefert die Position des ersten Zeichens des Suchtextes. substring(12, 15) nimmt die Indizes 12, 13 und 14. Häufige Fehler: 12 für den Punkt (von 1 an gezählt) und 14 für die Länge (letzter Index statt Anzahl). Bei equals kippt das Ergebnis schon wegen des großen F.
Ansatz: Schreibe den Dateinamen ab und setze über jedes Zeichen seinen Index — beginnend bei 0.
Weiter: length() zählt die Zeichen, der letzte Index ist eins kleiner. Der Unterstrich steht an Index 6.
A6
Buchstaben zählen an der Elbe
AFB IIMix
Ein Algorithmus aus Kapitel 1 — diesmal mit String-Methoden. Er durchläuft die Zeichenkette Zeichen für Zeichen:
String satz = "Elbe erleben";
int anzahl = 0;
for (int i = 0; i < satz.length(); i++) {
if (satz.charAt(i) == 'e') {
anzahl = anzahl + 1;
}
}
Welchen Wert hat anzahl nach der Schleife?
Rechne selbst und trage das Ergebnis ein — Enter prüft direkt.
Die Schleife läuft über die Indizes 0 bis 11 (length() = 12). Kleine e stehen an den Indizes 3, 5, 8 und 10 — also 4. Das große E an Index 0 zählt nicht mit, weil 'E' und 'e' verschiedene Zeichen sind. Übrigens: Zwei char-Werte darf man mit == vergleichen, denn char ist ein primitiver Typ — anders als String. Häufiger Fehler: 5, weil das große E mitgezählt wird.
Ansatz: Schreibe die Zeichenkette mit Indizes auf und markiere jedes Zeichen, bei dem die Bedingung wahr ist.
Weiter: Achtung, Groß- und Kleinschreibung: charAt(0) liefert das Zeichen E.
A7
Inseln nach Rückgabewert ordnen
AFB II
Gegeben ist String inseln = "Borkum-Juist-Norderney"; Sortiere die Aufrufe nach ihrem Rückgabewert — der kleinste zuerst.
Ziehe die Karten in die richtige Reihenfolge — mit der Tastatur: ↑/↓ verschiebt, Shift+↑/↓ wechselt nur den Fokus.
1inseln.indexOf("juist")
2inseln.substring(7, 12).length()
3inseln.indexOf("Juist")
4inseln.indexOf("Norderney")
5inseln.length()
Werte: indexOf("juist") = −1 (kleines j kommt nicht vor), substring(7, 12) ist "Juist" mit Länge 5, indexOf("Juist") = 7, indexOf("Norderney") = 13, length() = 22. Typischer Fehler: indexOf("juist") mit 7 bewerten und die Groß- und Kleinschreibung übersehen — oder −1 für „keine Zahl“ halten. Es ist ein ganz normaler int-Wert und damit der kleinste.
Ansatz: Nummeriere die Zeichen: Der erste Bindestrich steht an Index 6.
Weiter: substring(a, b) liefert b − a Zeichen. indexOf liefert −1, wenn der Text nicht gefunden wird.
A8
Abgabefrist mit der Klasse Datum
AFB III
Die Schülervertretung nutzt eine gegebene Klasse Datum für Abgabefristen. Den Quelltext kennst du nicht, nur die Dokumentation. (2027 ist kein Schaltjahr.)
Datum
c Datum(tag: Ganzzahl, monat: Ganzzahl, jahr: Ganzzahl)
+ getTag(): Ganzzahl
+ getMonat(): Ganzzahl
+ getJahr(): Ganzzahl
+ naechsterTag()
+ tageBis(d: Datum): Ganzzahl
+ alsText(): Zeichenkette
naechsterTag() — setzt das Datum auf den folgenden Kalendertag (auch über Monats- und Jahresgrenzen).
tageBis(d) — liefert die Anzahl der Tage von diesem Datum bis zum Datum d (negativ, wenn d früher liegt).
alsText() — liefert das Datum in der Form TT.MM.JJJJ, z. B. "07.11.2026".
Datum start = new Datum(28, 2, 2027);
Datum ende = new Datum(3, 3, 2027);
int dauer = start.tageBis(ende);
start.naechsterTag();
String t = start.alsText();
Rechne die Kette Schritt für Schritt: Erst wenn ein Schritt stimmt, wird der nächste freigeschaltet. Enter prüft.
Wert von dauerTage
Rückgabewert von start.getMonat() am Ende
Rückgabewert von t.length()Zeichen
Rückgabewert von t.indexOf(".2027")
Vom 28.02. bis 03.03.2027 sind es 3 Tage (28.02. → 01.03. → 02.03. → 03.03.). naechsterTag verändert das Objekt start: Es steht jetzt auf dem 01.03.2027, also Monat 3. alsText liefert "01.03.2027" — mit führenden Nullen genau 10 Zeichen. Der zweite Punkt steht an Index 5 (0, 1, Punkt, 0, 3, Punkt). Typische Fehler: 5 Tage (Februar mit 30 Tagen gedacht), Monat 2 (naechsterTag für eine Anfrage gehalten, die nichts ändert) und 8 Zeichen (ohne führende Nullen).
Ansatz: Lies in der Dokumentation nach, welche Methoden etwas verändern und welche nur etwas liefern.
Weiter: naechsterTag hat keinen Rückgabetyp — es ist ein Auftrag, der das Objekt start ändert. alsText liefert immer TT.MM.JJJJ mit führenden Nullen.
A9
Fehlersuche: Benutzerkennung erzeugen
AFB III
Für das Schulnetz soll aus Vor- und Nachnamen eine Kennung entstehen: die ersten drei Buchstaben des Vornamens und die ersten drei des Nachnamens, in Großbuchstaben — hier also JOHPET. Ausgegeben wird sie, wenn sie genau sechs Zeichen lang ist. Drei Zeilen sind falsch, eine davon lässt sich nicht übersetzen.
In diesem Text stecken Fehler. Klicke genau die falschen Zeilen an — die richtigen musst du stehen lassen.
Mit den Fehlern käme "JoPet" heraus — fünf Zeichen, in gemischter Schreibweise, und es würde gar nichts ausgegeben. Die Zeile if (laenge == 6) ist dagegen korrekt: laenge ist ein int, und int-Werte vergleicht man mit ==. Der Fehler mit length ohne Klammern ist eine typische Verwechslung mit den Reihungen aus Kapitel 2.
Ansatz: Prüfe bei jedem String-Aufruf in der Dokumentation: Stimmen die Parameter? Wird der Rückgabewert benutzt?
Weiter: Wie viele Zeichen liefert substring(0, 2)? Und was passiert mit dem Ergebnis von toUpperCase, wenn es nicht zugewiesen wird?
A10
Trickaufgabe: Ananas mit großem A
AFB IIITrick
Gegeben ist String w = "Ananas"; In der Zeile davor steht außerdem w.toUpperCase(); Welchen Wert liefert jeder Aufruf? Lies die Aufrufe genau.
Wähle für jede Zeile eine Stufe: −1 = Wert −1, 0 = Wert 0, 1 = Wert 1, 2 = Wert 2, 3 = Wert 3. Mit der Tastatur: Tab zur Zeile, ←/→ zwischen den Stufen, Enter setzt.
−1 = Wert −13 = Wert 3
w.indexOf("a")
w.indexOf("N")
w.substring(0, 2).indexOf("n")
w.indexOf("nas")
w.toUpperCase().indexOf("A")
Drei Fallen: Erstens beginnt Ananas mit einem großen A, das kleine a steht erst an Index 2. Zweitens hat w.toUpperCase(); w nicht verändert — w enthält weiter "Ananas", ein großes N gibt es nicht: −1. Erst in der letzten Zeile wird mit dem Rückgabewert von toUpperCase weitergearbeitet, dort steht A an Index 0. Und indexOf auf einem Teilstring zählt ab dessen Anfang: "An".indexOf("n") = 1.
Ansatz: Schreibe Ananas mit Indizes 0 bis 5 auf — und achte auf Groß- und Kleinschreibung.
Weiter: Die Anweisung w.toUpperCase(); ohne Zuweisung ändert w nicht. Bei einer Kette wird die zweite Methode auf den Rückgabewert der ersten angewendet.