Aufgabenblock — AFB I
Zehn Standardaufgaben quer durch das ganze Kapitel — bunt gemischt statt nach Unterkapiteln sortiert: Klassenkarten und Objektkarten lesen, Zustände nach Methodenaufrufen angeben, einfache Klassen notieren, Referenzen, Reihungen und Zeichenketten-Methoden. Das sind die sicheren Punkte in jeder Klausur zur Objektorientierung.
Eine Playlist-App verwendet die folgende Klasse. Entnehmen Sie der Klassenkarte, wie viele Parameter der Konstruktor hat und wie viele der Methoden Anfragen bzw. Aufträge sind.
- - titel: Zeichenkette
- - interpret: Zeichenkette
- - dauerSek: Ganzzahl
- - favorit: Wahrheitswert
- c Song(titel: Zeichenkette, interpret: Zeichenkette, dauerSek: Ganzzahl)
- + getTitel(): Zeichenkette
- + getDauerSek(): Ganzzahl
- + istFavorit(): Wahrheitswert
- + markieren()
- + setDauerSek(dauerSek: Ganzzahl)
+.Vollständige Lösung
Der Konstruktor c Song(titel, interpret, dauerSek) hat 3 Parameter. favorit wird nicht übergeben, sondern im Konstruktor auf false gesetzt.
Anfragen (3): getTitel(): Zeichenkette, getDauerSek(): Ganzzahl, istFavorit(): Wahrheitswert — sie haben einen Rückgabetyp.
Aufträge (2): markieren() und setDauerSek(dauerSek: Ganzzahl) — kein Rückgabetyp, sie ändern den Zustand.
Beachte: Für interpret gibt es keinen Getter. Das Attribut ist privat und damit von außen weder lesbar noch änderbar — ob das so gewollt ist, müsste man im Entwurf klären.
Die Methode kaffeeZubereiten() verbraucht 14 g Bohnen und erhöht becher um 1 — aber nur, wenn noch mindestens 14 g vorhanden sind. auffuellen(gramm) erhöht den Bohnenvorrat.
Kaffeeautomat k = new Kaffeeautomat(40); k.kaffeeZubereiten(); k.kaffeeZubereiten(); k.kaffeeZubereiten(); k.auffuellen(30); k.kaffeeZubereiten();
Geben Sie die Attributwerte des Objekts k nach allen Aufrufen an.
bohnenGramm und becher fortschreiben.bohnenGramm >= 14 nicht erfüllt ist?Vollständige Lösung
Die Methode im Quelltext:
public class Kaffeeautomat {
private int bohnenGramm;
private int becher;
public Kaffeeautomat(int bohnenGramm) {
this.bohnenGramm = bohnenGramm;
becher = 0;
}
public void kaffeeZubereiten() {
if (bohnenGramm >= 14) {
bohnenGramm = bohnenGramm - 14;
becher = becher + 1;
}
}
public void auffuellen(int gramm) {
bohnenGramm = bohnenGramm + gramm;
}
public int getBohnenGramm() {
return bohnenGramm;
}
public int getBecher() {
return becher;
}
}
Ablauf: 40 g / 0 → 26 g / 1 → 12 g / 2 → dritter Aufruf: 12 < 14, nichts passiert → auffüllen: 42 g / 2 → 28 g / 3.
- bohnenGramm = 28
- becher = 3
Typischer Fehler: 4 Becher und 14 g — dann wurde die Bedingung im dritten Aufruf übersehen.
- bohnenGramm = 40
- becher = 0
Die Anzeige im Schulbus speichert den Namen der nächsten Haltestelle: String h = "Am Rathausplatz";
Nennen Sie die Rückgaben von h.length() und h.indexOf("platz"). Nennen Sie außerdem die Rückgaben von h.substring(3, 10) und h.charAt(h.length() - 1).
indexOf liefert den Index des ersten Zeichens des gefundenen Teilstrings. substring(a, b) liefert die Zeichen von Index a bis ausschließlich b.length() − 1, nie length().Vollständige Lösung
Indizes: A0 m1 ␣2 R3 a4 t5 h6 a7 u8 s9 p10 l11 a12 t13 z14
h.length() → 15 (Indizes 0 bis 14).
h.indexOf("platz") → 10 („p“ steht an Index 10).
h.substring(3, 10) → "Rathaus" (Index 3 bis 9; Index 10 gehört nicht mehr dazu).
h.charAt(h.length() - 1) → das Zeichen 'z' (Index 14). h.charAt(h.length()) würde dagegen einen Laufzeitfehler auslösen.
