Transcript
Repetitorium Informatik (Java) Wintersemester 2015/16
[email protected]
8. Übungsblatt Aufgabe 8.1: Tiere: Overriding Laden Sie die Klassen Tier, Hund und Fisch von der Internetseite herunter. Die Konstruktoren der Klassen sowie die Signaturen der Methoden ausgabe() sind bereits vorhanden. a) Implementieren Sie die Methode Tier.ausgabe(). Es sollen alle Attribute der Klasse ausgegeben werden. Pro Zeile soll jeweils der Name eines Attributs sowie dessen Wert ausgegeben werden. b) Implementieren Sie die Methode Hund.ausgabe(). Zusätzlich zu den Attributen der Klasse Tier sollen auch die spezialisierten Attribute der Klasse Hund ausgegeben werden. Denken Sie daran, was sie über Overriding und die Verwendung des Schlüsselworts super gelernt haben! c) Implementieren Sie die Methode Fisch.ausgabe(). Zusätzlich zu den Attributen der Klasse Tier sollen auch die spezialisierten Attribute der Klasse Fisch ausgegeben werden. Denken Sie daran, was sie über Overriding und die Verwendung des Schlüsselworts super gelernt haben!). d) Laden Sie die Klasse Zoo von unserer Internetseite herunter und führen Sie diese aus, um Ihre Implementierung zu testen. Aufgabe 8.2: Pakete Im Vortrag haben Sie die Verwendung von Paketen kennengelernt. In dieser Aufgabe sollen Sie ein eigenes kleines Paket schreiben und von „außerhalb“ verwenden. Denken Sie daran, was Sie über die notwendige Ordnerstruktur bei der Verwendung von Paketen gelernt haben! a) Schreiben Sie eine Klasse Zahl, welche sich im Paket praktikum.tag8 befinden soll. Die Klasse soll in der Lage sein, per Kontruktor einen int-Wert als Parameter entgegenzunehmen und diesen als Attribut mit dem Namen „wert“ zu speichern. Achten Sie darauf das Attribut public zu deklarieren! b) Schreiben
Sie eine Klasse Berechnungen, welche sich ebenfalls im Paket praktikum.tag8 befindet. Die Klasse soll die statischen Methoden addieren() und multiplizieren() beinhalten, die jeweils zwei Zahl-Objekte entgegen nehmen und eine Addition bzw. Multiplikation mit den in den Objekten gespeicherten Werten durchführen. Das Ergebnis soll als neue Instanz der Klasse Zahl zurückgegeben werden.
c) Schreiben Sie eine Klasse Programm, welche sich im Paket praktikum befindet und die Klassen Zahl und Berechnungen verwendet. Berechnen Sie mit Hilfe dieser Klassen den Wert des Ausdrucks 2 ∗ 5 + 3. Geben Sie das Ergebnis auf der Konsole aus.
-1-
Repetitorium Informatik (Java) Wintersemester 2015/16
[email protected]
Aufgabe 8.3: OwnMath In dieser Aufgabe sollen Sie Teile der Klasse Math, die Sie bereits im Vortrag kennengelernt haben, selbst implementieren. a) Öffnen Sie die Dokumentation zur Java-API in einem Browser. Suchen Sie (beispielsweise über die Übersicht über alle Klassen links unten) die Klasse Math aus dem Paket java.lang. b) Definieren Sie - wie in der Klasse Math auch - die beiden Konstanten E (Euler-Zahl) und PI. Sie können beispielsweise in Wikipedia nachschlagen, um die entsprechenden Werte zu erhalten. c) Lesen Sie in der Dokumentation die Beschreibungen zu den verschiedenen Überladungen der Methode min() und implementieren Sie diese (alle 4!) als Klassenmethoden der Klasse OwnMath. d) Lesen Sie in der Dokumentation die Beschreibungen zu den verschiedenen Überladungen der Methode abs() und implementieren Sie diese (alle 4!) als Klassenmethoden der Klasse OwnMath. e) Implementieren Sie die statische Methode sqrt(), welche aus einer Zahl a die Wurzel zieht und als Ergebnis zurückgibt. Verwenden Sie zur Berechnung der Wurzel das sog. Heron-Verfahren. Dabei handelt es sich um ein Iterationsverfahren, welches bei einem Startwert x0 (hier: x0 = 1) beginnt und das jeweils nächste Folgenglied nach der Iterationsvorschrift xn+1 =
xn +
a xn
2
berechnet. Berechnen Sie die einzelnen Folgenglieder in einer Schleife und brechen Sie diese ab, sobald die (Absolut-)Differenz zweier direkt aufeinanderfolgender Folgenglieder kleiner 0.01 ist. Benutzen Sie hierzu Ihre Implementierung der Methode abs(). f) Lesen Sie in der Dokumentation die Beschreibung zu der Methode toDegrees() und implementieren Sie eine entsprechende statische Methode in Ihrer Klasse OwnMath. Benutzen Sie Ihre eigene Definition der Konstante PI. Sie können Ihre Implementierung mit der Klasse OwnMathTest testen, die Sie auf unserer Internetseite finden. Denken Sie daran, Assertions beim Aufruf von OwnMathTest zu aktivieren!
-2-
Repetitorium Informatik (Java) Wintersemester 2015/16
[email protected]
Aufgabe 8.4: Lotto Sie haben im Vortrag bereits die Klasse Scanner kennengelernt, die dazu benutzt werden kann, Eingaben des Benutzers über die Standardeingabe zu lesen. In dieser Aufgabe sollen Sie eine Abwandlung des Lotto-Spiels implementieren. Dabei soll der Spieler nach und nach 5 Zahlen zwischen 1 und 24 „ankreuzen“ können. Anschließend werden 5 Zahlen „gezogen“ und dem Spieler mitgeteilt, wie viele Treffer er hat. Laden Sie sich für diese Aufgabe die Datei Lotto.java von der Internetseite, welche bereits einen Teil der Implementierung enthält. a) Implementieren Sie zunächst die Methode zahlenAnkreuzen(). Diese übernimmt das Einlesen der Zahlen vom Spieler. Erzeugen Sie dazu zunächst ein int-Array in der entsprechenden Größe (verwenden Sie die Konstante ANZAHL), in welches die Zahlen gespeichert werden sollen. Anschließend erzeugen Sie ein neues Scanner-Objekt, wie Sie es im Vortrag bereits kennengelernt haben. In einer Schleife lesen Sie so viele Zahlen ein, wie es die Konstante ANZAHL vorgibt. Sie können zwar davon ausgehen, dass nur Zahlen eingegeben werden, allerdings müssen die eingegebenen Zahlen auf Gültigkeit überprüft werden. Jede Zahl muss zwischen 1 und 24 liegen und darf nur einmal angekreuzt werden. Die Überprüfung dieser Randbedingungen soll in den Methoden zahlGueltig() und zahlBereitsVorhanden() implementiert werden. Ist eine Eingabe ungültig, muss eine entsprechende Meldung an den Spieler ausgegeben werden und die Zahl muss erneut eingegeben werden. Geben Sie das erzeugte Array mit den Eingaben als Ergebnis der Methode zurück. b) Implementieren Sie nun die Methode zahlenZiehen(). Diese Methode soll so viele Zahlen „ziehen“, wie es die Konstante ANZAHL vorgibt, und in einem Array speichern. Dieses Array wird als Ergebnis der Methode zurückgegeben. Für die Bestimmung einer Zufallszahl im korrekten Intervall können Sie die Methode zufallszahl() benutzen. Stellen Sie auch hier sicher, dass jede Zahl maximal einmal „gezogen“ wird. c) Implementieren Sie zuletzt die Methode richtige(). Diese Methode nimmt als Parameter zwei int-Arrays entgegen. Eines für die „angekreuzten“ Zahlen und eines für die „gezogenen“ Zahlen. Die Methode ermittelt, wie viele Zahlen des Spielers „gezogen“ wurden und liefert das Ergebnis als int zurück. Überlegen Sie hierzu wie Sie feststellen können, ob eine Zahl in einem Array vorkommt. Testen Sie Ihre Implementierung, in dem Sie das Programm ausführen. Testen Sie auch, ob sich Ihr Programm korrekt im Sinne der Aufgabenstellung verhält, wenn Sie ungültige Zahlen eingeben.
-3-