Prof. Dr. Stephan Kleuker Hochschule Osnabrück Fakultät Ing.-Wissenschaften und Informatik - Software-Entwicklung - Grundlagen Programmierung Wintersemester 2011/12 Aufgabenblatt 5 15. Aufgabe (12 Punkte, Achtung: Klausurähnlichkeit) Schreiben Sie eine neue Klasse Messreihe, die als Objektvariablen den Messort und eine Sammlung von ganzzahligen Messwerten enthält. Zu jeder der folgenden Teilaufgaben wurden bereits Tests in der von der Veranstaltungsseite erhältlichen Klasse MessreiheTest geschrieben, prüfen Sie, dass alle Tests erfolgreich durchlaufen. Hinweis: Natürlich dürfen Sie weitere Methoden zum Strukturieren Ihres Programms oder bei Code-Wiederholungen schreiben. Sie dürfen die Tests auch ergänzen und z. B. sinnvolle Fehlermeldungen ausgeben. Überlegen Sie bei den zu erstellenden Methoden immer, wie Sie Spezialfälle (null-Werte, leere Listen) sinnvoll bearbeiten müssen, damit es zu keinen Fehlermeldungen kommt. a) Realisieren Sie die genannte Klasse mit Konstruktor, get- und set-Methoden für alle Objektvariablen, einer hinzufuegen(Integer)-Methode für Messwerte mit der ein Messwert in die Sammlung eingefügt wird, und einer toString()-Methode für eine nette Ausgabe (ArrayList-Objekte realisieren toString() bereits sinnvoll). b) Schreiben Sie eine Methode min(), die den kleinsten Messwert zurückgibt. Falls es keinen Messwert gibt, soll die Zahl null zurückgegeben werden. c) Schreiben Sie eine Methode durchschnitt(), die den Durchschnitt der Messwerte als Double-Wert zurück liefert (ein Integer kann durch „* 1.0“ in einen Double-Wert gewandelt werden). d) Schreiben Sie eine Methode anzahlZwischen(Integer,Integer), die zwei ganzzahlige Grenzwerte min und max übergeben bekommt und die Anzahl der Elemente zurückgibt, die innerhalb dieser Grenzen (einschließlich) liegen. e) Schreiben Sie eine Methode zweiGleiche(), die genau dann true zurückgibt, wenn es mindestens zwei gleiche Messwerte gibt. f) Schreiben Sie eine Methode verschieden(Messreihe), die ein Messreihen-Objekt übergeben bekommt und die genau dann true zurückgibt, wenn kein Messwert in beiden Objekten vorkommt, z. B. soll {3,3,2,4,4} zusammen mit {1,5,5,5} true ergeben. g) Schreiben Sie eine Methode alleWerteGleichOft(Messreihe), die ein MessreihenObjekt übergeben bekommt und die genau dann true zurückgibt, wenn jeder Wert der einen Messreihe genauso oft in der anderen Messreihe vorkommt, z. B. soll {3,3,2,4,4} zusammen mit {4,3,2,4,3} true ergeben. 16. Aufgabe (6 Punkte) Schreiben Sie ein Programm, das es dem Nutzer ermöglicht, Rechtecke auf einem Interaktionsbrett zu zeichnen und wieder zu löschen. Sie müssen dazu folgende Methoden nutzen, damit Sie wieder auf die Rechtecke zugreifen können (vgl. vorherige Aufgaben). Method Summary void loescheObjekt(java.lang.Object quelle, java.lang.String name) Ein mit den Parametern quelle und name vorher erzeugtes graphisches Element wird gelöscht. void neuesRechteck(java.lang.Object quelle, java.lang.String name, java.lang.Integer x, java.lang.Integer y, java.lang.Integer breite, java.lang.Integer hoehe) Methode zum Zeichnen eines neuen Rechtecks, das verändert und dessen Nutzung beobachtet werden kann. Seite 1 von 2 Prof. Dr. Stephan Kleuker Hochschule Osnabrück Fakultät Ing.-Wissenschaften und Informatik - Software-Entwicklung - Grundlagen Programmierung Wintersemester 2011/12 Aufgabenblatt 5 Die Methode loescheObjekt(Object, String) bietet die Möglichkeit, Rechtecke wieder zu löschen. Damit dies möglich ist, müssen die Rechtecke unterschiedliche Namen erhalten. Achten Sie weiterhin darauf, dass sich die Rechtecke zwar berühren dürfen (Ränder nebeneinander), aber nicht überlappen. Nutzen Sie zur Verwaltung der Rechtecke eine eigene Klasse Rechteck (Sie können selbstgeschriebene Klassen aus vorherigen Aufgaben nutzen und erweitern). Informieren Sie den Nutzer jeweils über Fehleingaben. Ein Nutzungsdialog kann wie folgt aussehen, Eingaben sind umrandet. Anmerkungen: Damit Sie beim Ausprobieren nicht immer wieder viele Rechtecke eingeben müssen, können Sie z. B. eine Methode ergänzen, mit der drei von Ihnen fest vorgegebene Rechtecke bereits ergänzt werden, im folgenden Beispiel haben die Rechtecke die Namen „R1“, „R2“ und „R3“. Sie dürfen vereinfachend davon ausgehen, dass der Nutzer nur positive Werte eingibt. Überlegen Sie sich auf Papier, welche Fälle es von Überlappungen von Rechtecken geben kann. (0) Programm beenden (1) neues Rechteck (2) Rechteck loeschen: 1 eindeutiger Name: Ute X-Wert: 60 Y-Wert: 70 Breite: 30 Hoehe: 20 Rechteck Ute uebernommen (0) Programm beenden (1) neues Rechteck (2) Rechteck loeschen: 1 eindeutiger Name: Ute Name schon vergeben. (0) Programm beenden (1) neues Rechteck (2) Rechteck loeschen: 1 eindeutiger Name: Ulf X-Wert: 50 Y-Wert: 60 Breite: 20 Hoehe: 20 Leider Ueberlappung (0) Programm beenden (1) neues Rechteck (2) Rechteck loeschen: 1 eindeutiger Name: Ulf X-Wert: 91 Y-Wert: 70 Breite: 20 Hoehe: 20 Rechteck Ulf uebernommen (0) Programm beenden (1) neues Rechteck (2) Rechteck loeschen: 2 R1 R2 R3 Ute Ulf Name des Rechtecks: R1 R1 geloescht (0) Programm beenden (1) neues Rechteck (2) Rechteck loeschen: 2 R2 R3 Ute Ulf Name des Rechtecks: Uta Gibt es nicht (0) Programm beenden (1) neues Rechteck (2) Rechteck loeschen: 0 Freiwillig: Ändern Sie Ihr Programm so ab, dass sich die Rechtecke überlappen dürfen, dabei soll jede Überlappung durch ein ausgefülltes Rechteck dargestellt werden. Ändern Sie das Ursprungsprogramm so ab, dass die Rechtecke verschoben werden können, aber wieder nur an Stellen platziert werden dürfen, an denen es keine Überlappung mit anderen Rechtecken gibt. Seite 2 von 2