Objektorientierte Programmierung WS 2013/2014 - Lösung 4
Prof. Dr. U. KastensInstitut für Informatik, Fakultät für Elektrotechnik, Informatik und Mathematik, Universität Paderborn
Lösung zu Aufgabe 1
Aus der Aufgabenstellung und dem vorgegebenen Rahmen ergibt sich folgende Struktur:
Die Klasse DateiSystemEintrag
class DateiSystemEintrag { private String name; public DateiSystemEintrag (String name) { this.name = name; } public void druckeVerzeichnisBaum (String einrueck) { System.out.println(einrueck + name); } }Die Klasse Datei
class Datei extends DateiSystemEintrag { public Datei (String name) { super(name); } }Die Klasse Ordner
import java.util.ArrayList; class Ordner extends DateiSystemEintrag { ArrayList<DateiSystemEintrag> inhalt; public Ordner (String name) { super(name); inhalt = new ArrayList<DateiSystemEintrag>(); } public void hinzufuegen (DateiSystemEintrag e) { inhalt.add(e); } public void druckeVerzeichnisBaum (String einrueck) { super.druckeVerzeichnisBaum(einrueck); for(DateiSystemEintrag dse : inhalt) { dse.druckeVerzeichnisBaum(einrueck + " "); } } }
Hier sind die Klassen zum Herunterladen: blatt4/verzbaumloes
.
Lösung zu Aufgabe 2
- a)
-
Die Aufrufketten für die beiden Aufrufe
ball1.moveSpielBall(); ball2.moveSpielBall();
sindball1.moveSpielBall() == Spielball.moveSpielBall() --> Maus.moveSpielBall() --> Spielball.move() --> Ball.move
ball2.moveSpielBall() == Spielball.moveSpielBall() --> Katze.moveSpielBall() --> Spielball.move() --> Ball.move
- b)
-
Das Wechseln der Rollen von Katze und Maus, nachdem die Maus vollständig
aufgefressen ist, kann man durch das Einfügen folgenden Codes in die
paint()-Methode von KatzUndMaus erreichen:
if (ball1.x() == ball2.x() && ball1.y() == ball2.y()) { // die Maus ist weg if (ball1.getRolle() instanceof Maus) { // ball1 war die Maus, wird jetzt zur Katze ball1.setRolle(new Katze(ball1, ball2)); // ball2 also zur neuen Maus ball2.setRolle(new Maus(ball2, this)); } else { // und andersrum: ball1 war also die Katze ball1.setRolle(new Maus(ball1, this)); // ball2 wird jetzt Katze ball2.setRolle(new Katze(ball2, ball1)); } // jeder in seine Ecke: ball1.moveTo(20 - RADIUS, FRAMEHEIGHT - 20 - RADIUS); ball2.moveTo(FRAMEWIDTH - 20 - RADIUS, 40 - RADIUS); }
Anstatt die instanceof-Methode zu verwenden, könnten die Interfaces/Klassen SpielRolle, Katze und Maus auch eine Methode zur Identifikation (etwa boolean ichBinMaus()) zur Verfügung stellen.
Die vollständige Lösung findet sich in
blatt4/LoesKatzUndMaus
.
Lösung zu Aufgabe 3
- a)
-
Die Methode countMe(String s) erhöht den Zähler für den
Eintrag s um 1, bzw. setzt ihn auf 1 beim ersten Auftreten von
s:
public void countMe(String s) { Integer freq = get(s); put(s, (freq == null) ? 1 : freq + 1); }
- b)
-
Die Variante von WordCount, die TreeMap-Komponente verwendet:
WordCount2.java
.
Generiert mit Camelot | Probleme mit Camelot? | Geändert am: 20.12.2013