04.08.2013 Aufrufe

Blatt 3 - Homepage von Peter Ziesche

Blatt 3 - Homepage von Peter Ziesche

Blatt 3 - Homepage von Peter Ziesche

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!