Blatt 3 - Homepage von Peter Ziesche
Blatt 3 - Homepage von Peter Ziesche
Blatt 3 - Homepage von Peter Ziesche
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Einführung in die Programmierung<br />
Sommersemester 2004 – 2. Semester – Übungsblatt Nr. 3<br />
Aufgabe 1<br />
Im Programm Main.java werden mehrere Objekte der Klasse Person erzeugt und<br />
nacheinander in ein Array geschrieben. Anschließend wird in einer Schleife jedes Element des<br />
Arrays ausgegeben.<br />
Sie können das Programm <strong>von</strong> www.peterziesche.de/tbw herunterladen.<br />
Teil 1<br />
Lagern Sie die Anweisungen zur Ausgabe der Personendaten in eine eigene Methode aus. In der<br />
Schleife soll diese Methode für jedes Person-Objekt aufgerufen werden.<br />
Teil 2<br />
Das Programm Main.java deklariert für jedes neu zu erzeugende Person-Objekt eine<br />
Variable. Es reicht aber aus, nur Eine Variable p vom Typ Person zu deklarieren und alle mit<br />
new erzeugen Person-Objekte dieser einen Variablen zuzuweisen. Wenn die Objekte sofort<br />
anschließend in das Array gespeichert werden, geht beim Überschreiben <strong>von</strong> p durch das<br />
nächste Person-Objekt kein Objekt verloren. Ändern Sie das Programm aus Teil 1 so ab, dass<br />
es mit einer Variablen auskommt. Zeichnen Sie die Objekte und Referenzen auf Papier auf, um<br />
sich den Ablauf klar zu machen.<br />
Aufgabe 2<br />
Gewöhnlich gibt es in einer Klasse für alle Attribute Zugriffs-Methoden (getter und setter<br />
genannt). Die Struktur sieht z.B. wie folgt aus:<br />
public class Kreis {<br />
private double radius;<br />
Fachhochschule Südwestfalen<br />
<strong>Peter</strong> <strong>Ziesche</strong><br />
E-Mail: tbw@peterziesche.de<br />
public double getRadius() {<br />
return radius;<br />
}<br />
public void setRadius( double neuerRadius ) {<br />
radius = neuerRadius;<br />
}<br />
}<br />
Der Vorteil <strong>von</strong> getter und setter ist, dass geprüft werden kann, ob ein zu setzender Attributwert<br />
gültig ist. Für die angegebene Klasse Kreis macht es z.B. keinen Sinn, einen negativen Radius<br />
zu setzen. Die getter und setter werden wie folgt verwendet:
Kreis kreis = new Kreis();<br />
kreis.setRadius( 12.5 );<br />
System.out.println( kreis.getRadius() );<br />
Ändern Sie die Klasse Person so ab, dass alle Attribute privat (private) sind und für jedes<br />
Attribut getter und setter zur Verfügung stehen. Passen Sie auch Main.java so an, dass es mit<br />
der neuen Klasse Person korrekt funktioniert.<br />
Aufgabe 3<br />
Teil 1<br />
Schreiben Sie in Main.java eine Methode, die zwei Person-Objekte miteinander vergleicht<br />
und das kleinere zurückliefert. Mit kleiner ist hier die Reihenfolge bei alphabetischer Sortierung<br />
gemeint. Die Methode soll wie folgt aussehen:<br />
public Person getKleinere( Person p1, Person p2 ) {<br />
...<br />
}<br />
Beim Vergleich sollen zunächst nur der Namen verglichen werden. Die Namen sind Strings.<br />
Diese lassen sich wie folgt vergleichen:<br />
int vergleichsergebnis = string1.compareTo( string2 );<br />
Folgende Ergebnisse sind möglich:<br />
Ergebnis kleiner als 0: string1 ist kleiner als string2<br />
Ergebnis gleich 0: string1 ist gleich string2<br />
Ergebnis größer als 0: string1 ist größer als string2<br />
Beachten Sie, dass Sie auf das name-Attribut <strong>von</strong> Person nur mit Hilfe <strong>von</strong> getter-Methoden<br />
zugreifen können. Testen Sie die Methode, indem Sie sie getKleinere() aus main heraus<br />
mit zwei Person-Objekten aufrufen und das zurück gelieferte Objekt ausgeben (siehe Aufgabe<br />
1 Teil 1).<br />
Teil 2<br />
Ändern Sie Ihre Methode nun so ab, dass bei gleichen Nachnamen der Vorname ausgewertet<br />
wird. Sind auch die Vornamen gleich, soll das Geburtsjahr ausgewertet werden.<br />
Teil 3<br />
Schreiben sie eine weitere Methode zum vergleichen <strong>von</strong> zwei Person-Objekten. Diesmal soll<br />
nicht die kleinere Person zurückgeliefert werden, sondern ob die erste oder die zweite<br />
übergebene Person die kleinere ist. Die Methode sieht wie folgt aus:
public int welcheIstKleiner( Person p1, Person p2 ) {<br />
...<br />
}<br />
Testen Sie auch diese Methode analog zu Teil 1 und 2.<br />
Teil 3<br />
In der Übung wurde ein Programm entwickelt, dass ein Array <strong>von</strong> Zahlen in aufsteigender<br />
Reihenfolge sortiert. Es kann aus dem Internet heruntergeladen werden<br />
(www.peterziesche.de/tbw/praktikum2/SortierenDurchMinimumsuche.java).<br />
Schreiben Sie in Main.java eine Methode zum Sortieren <strong>von</strong> Person-Objekten in einem<br />
Array. Die Methode sieht wie folgt aus:<br />
sortieren( Person[] personen ) {<br />
...<br />
}<br />
Diese Methode soll die Personen im übergebenen Array sortieren. Kopieren Sie dazu zunächst<br />
den Code des Beispielprogramms in die leere Methode und passen Sie diesen so an, dass er statt<br />
mit Zahlen mit Person-Objekten arbeitet. Verwenden Sie zum Vergleichen der Person-Objekte<br />
die Methoden aus Teil 1 und/oder Teil 2.<br />
Aufgabe 4<br />
Ein Array ist ein Container für Objekte mit fester Größe, die sich im Nachhinein nicht mehr<br />
verändern lässt. Wenn im Voraus nicht bekannt ist, wieviele Person-Objekte erzeugt werden<br />
sollen, verwendet man besser einen Container, der seine Größe dynamisch anpassen kann. Ein<br />
solcher Container ist ArrayList. Diese Klasse wird wie folgt benutzt:<br />
import java.util.*;<br />
public class TestKlasse {<br />
public String bezeichnung;<br />
public static void main( String[] args ) {<br />
ArrayList al = new ArrayList();<br />
TestKlasse tk = new TestKlasse();<br />
al.add( tk );<br />
tk = new TestKlasse();<br />
al.add( tk );<br />
...<br />
for( int i=0; i
}<br />
}<br />
}<br />
Um ein Element an einer bestimmten Stelle zu setzen und das dort stehende Element zu<br />
überschreiben, verwenden Sie die den Aufruf<br />
TestKlasse altesObjekt = al.set( index, neuesObjekt );<br />
Ändern Sie das Programm Main.java so ab, dass statt eines Arrays eine ArrayList<br />
verwendet wird. Vergeben Sie für die Variablen sinnvolle Namen.<br />
Aufgabe 5<br />
Teil 1<br />
Schreiben Sie eine Klasse Kreis mit den Attributen positionX, positionY und radius.<br />
Die Attribute sollen als Typ double haben, sie sollen private sein und durch getter- und<br />
setter-Methoden zugreifbar sein.<br />
Teil 2<br />
Schreiben Sie eine main-Methode in Kreis. Diese soll 5 Kreis-Objekte mit beliebiger<br />
Position und beliebigem Radius erzeugen und in ein Array speichern.<br />
Teil 3<br />
Das Programm soll das Rechteck berechnen, dass alle Kreise genau umschließt. Es soll die x-<br />
und y-Position dieses Rechtecks, sowie seine Breite und Höhe ausgeben.<br />
Beispiel:<br />
Tipp: Wenn Sie Teil 1 und Teil 2 fertig programmiert haben, schieben Sie die Tastatur beiseite<br />
und überlegen sich zunächst gründlich, wie sie Teil 3 lösen wollen. Überlegen Sie sich also<br />
einen Algorithmus unabhängig <strong>von</strong> Java. Verwenden Sie dazu ruhig ein <strong>Blatt</strong> Papier. Erst wenn<br />
Sie sich über den Lösungsweg im klaren sind, ziehen Sie sich die Tastatur wieder heran und<br />
setzen Ihren Algorithmus in Java um.