Übung Softwareentwicklung 2 SS 2018
Übung 04: Generische Datenstrukturen
Abgabetermin: 19. 4. 2018, 10:15
Name: Matrikelnummer:
Informatik: G1(Prähofer) G2(Weninger) G3(Prähofer) G4 (Weninger) G5(Löberbauer) G6 (Aumayr) WIN: G1 (Khalil) G2 (Hummel) G3 (Khalil) G4 (Löberbauer)
Aufgabe Punkte abzugeben schriftlich abzugeben elektronisch korr. Punkte
Übung 4 24 Java-Programm,
Ausgabe eines Testlaufs
Java-Programm
Übung 04: Generische Datenstrukturen (24 Punkte)
In dieser Übungsaufgabe sollen Sie eine generische ArrayList sowie eine generische EntryBasedMap entwickeln.
Dazu werden ihnen zwei Interfaces, List und Map, zur Verfügung gestellt, welche implementiert werden müssen.
ArrayList: (10 Punkte)
Entwickeln Sie die generische Klasse ArrayList<T>, welche List<T> implementiert. Die öffentlische Schnittstelle des Interfaces umfasst die Methoden add, get, remove, contains sowie size. Die Beschreibungen der einzelnen Methoden entnehmen Sie bitte der JavaDoc des Interfaces.
Wie der Name sagt, soll ArrayList intern ein Array (vom generischen Typ) nutzen, um seine Einträge zu speichern. Sollte das interne Array bereits voll sein wenn add aufgerufen wird, muss es vergrößert (zB. doppelt so groß) werden. Es muss bei remove-Aufrufen nicht verkleinert werden, aber es muss darauf geachtet werden, dass keine Lücken im Array entstehen.
Außerdem soll ArrayList das generische Interface Iterable<T> implementieren. Dazu muss ein Iterator impelmentiert werden. Dieser soll als anonyme Klasse innerhalb der Methode iterator() implementiert werden und direkt auf das interne Array von ArrayList zugreifen.
Hinweise
: Um leichter mit Arrays zu arbeiten, können Sie die statischen Methoden in der Klasse Arrays (z.B.
Arrays.copyOf) sowie System.arrayCopy nutzen.
EntryBasedMap: (10 Punkte)
Eine Map ist eine Sammlung von Key-Value-Paaren.
Entwickeln Sie die generische Klasse EntryBasedMap<K, V>, welche Map<K, V> implementiert. Die öffentliche Schnittstelle des Interfaces umfasst die Methoden put, get, contains, remove, size, keyIterator, valueIterator und iterator. Die Beschreibungen der einzelnen Methoden entnehmen Sie bitte der JavaDoc des Interfaces.
Zum Speichern eines einzelnen Eintrags soll die Klasse Entry als innere Klasse innerhalb von EntryBasedMap implementiert werden. Entry soll dazu das generische Interface Tuple<K, V> mit seinen Methoden getKey und getValue implementieren. Die Typen für Key und Value sollen dabei denen von EntryBasedMap entsprechen.
Diese Klasse EntryBasedMap soll eine ArrayList vom generischen Typ Entry zur Speicherung der einzelnen Einträge nutzen.
Übung Softwareentwicklung 2 SS 2018
Bezüglich der Methoden keyIterator(), valueIterator() und iterator(): Es sollen drei verschiedene Iteratoren für die EntryBasedMap entwickelt werden: Einer, der über alle Keys der Map iteriert (KeyIterator), einer, der über alle Werte der Map iteriert (ValueIterator) und einer, der über alle KeyValue-Einträge der Map iteriert (EntryIterator). Diese 3 Iteratoren sollen als private innere Klassen innerhalb von EntryBasedMap implementiert werden und direkt auf die interne ArrayList der Map zugreifen.
Test: (4 Punkte)
Um die von Ihnen entwickelten Datenstrukturen zu testen, entwickeln Sie einen einfach Eingabe-Ausgabe-Dialog.
Dieser soll dem Benutzer erlauben, eine Einkaufsliste zu verwalten.
Eine Einkaufsliste ist eine Map, deren Schlüssel vom Typ String sind (die Gegenstände, die eingekauft werden müssen), und die Werte vom Typ Integer (die zu kaufende Anzahl des jeweiligen Gegenstands).
Der Eingabe-Ausgabe-Dialog soll folgende Funktionalität umfassen:
Eingabe eines neuen Eintrags für die Einkaufsliste (Gegenstand + Anzahl)
Löschen eines Eintrags (über den Gegenstandsnamen)
Ausgabe der gesamten Einkaufsliste (Je Eintrag: Gegenstand + Anzahl)
Anzahl der zu kaufenden Gegenstände (= Summe aller Werte in der Map)
Anzahl der Einträge auf der Einkaufsliste
Hinweise
: Ein Rahmen für den Dialog wird Ihnen im Download bereitgestellt. Sie sollen an den mit // TODO:
gekennzeichneten Stellen, den entsprechenden Programmteile einfügen.
Beispielprogrammablauf:
--- --- SHOPPING LIST --- --- --- Funktionalitäten:
(1) Neuen Eintrag hinzufügen (2) Löschen eines Eintrags
(3) Einkaufsliste (Gegenstand + Anzahl) ausgeben (4) Anzahl der zu kaufenden Gegenstände ausgeben (5) Anzahl der unterschiedlichen Gegenstände (X) Ende
--- Ihre Eingabe: 1
Gegenstand: Eier Anzahl: 5
Ihre Eingabe: 1 Gegenstand: Speck Anzahl: 2
Ihre Eingabe: 3 Eier -> 5
Speck -> 2 Ihre Eingabe: 1 Gegenstand: Bananen Anzahl: 2
Ihre Eingabe: 3 Eier -> 5
Speck -> 2
Übung Softwareentwicklung 2 SS 2018
Bananen -> 2 Ihre Eingabe: 2 Gegenstand: Speck
Speck von Einkaufsliste entfernt Ihre Eingabe: 2
Gegenstand: Wasserball
Wasserball nicht auf Einkaufsliste, kann daher auch nicht entfernt werden Ihre Eingabe: 3
Eier -> 5 Bananen -> 2 Ihre Eingabe: 1 Gegenstand: Bananen Anzahl: 10
Ihre Eingabe: 3 Eier -> 5
Bananen -> 10 Ihre Eingabe: 4 15
Ihre Eingabe: 5 2
Ihre Eingabe: 6
6 ist keine valide Eingabe!
Ihre Eingabe: X