Labor – Arrays, Sortieren, String-Methoden: Bibliothek
Es sollen lückenlose Arrays mit freeIdx
zur Verwaltung in Verlag
und in Bibliothek
verwendet werden.
1. Klasse Buch
Standard-Elemente
-
Konstruktor … selbsterklärend (Setter verwenden!)
-
Setters und Getters … in den Settern ist Text (Titel, Autor) auf null und
isBlank()
zu prüfen,publJahr
muss zw.1600
und2021
liegen, Verlag ist aufnull
zu prüfen.Bei ungültigem Wert soll sinngemäß folgende Fehlermeldung ausgegeben werden:
"FEHLER in setPublJahr - publJahr = %d - bleibt auf %d" (das erste%d
ist durch den fehlerhaften Übergabe-Parameter zu ersetzen, das zweite%d
durch den bestehenden Wert der Instanzvariablen).Das kann entweder wie gewohnt oder eleganter mit
System.out.format("FEHLER in setPublJahr - publJahr = %d - bleibt auf %d", publJahr, this.publJahr);
erfolgen (Bei Strings wird statt%d
ein%s
verwendet, Zeilenschaltung erfolgt durch%n
, standardmäßig wird keine Zeilenschaltung angefügt). -
toString(): String … siehe Beispiel-Code
-
equals(other Buch) … vereinfachtes equals (für PLÜ ausreichend, hier darf aber NICHT
@Override
darübergeschrieben werden!) -
compareTo(other: Buch): int … wird zum Sortieren von Bücher-Listen aufgerufen (siehe Beispiel-Implementation von
Verlag
– HilfsmethodefindMinValPos(..)
und damit indirekt vonselectionSort(..)
). -
static void testen() … testet im besten Fall alle Methoden – und zwar idealerweise so, dass auch alle Fehlerfälle auftreten (wird bei der PLÜ nich vollständig verlangt!).
WICHTIG: Statische Methoden sind per Rechtsklick auf die Klasse (nicht das Objekt!!) direkt unter den Konstruktoren sichtbar und aufrufbar!
2. Klasse Verlag
Wird im vorliegenden Beispiel hauptsächlich als Attribut von Buch verwendet. Zusätzlich verwaltet der Verlag eine Liste von ihm veröffentlichter Bücher und stellt sicher, dass jede Buch-Instanz nur einmal enthalten ist (beim erstmaligen Auftreten eines Buches wird es in die Bücherliste aufgenommen). Viele Methoden, die auch in Bibliothek implementiert werden sollen, sind hier zu finden.
Standard-Elemente
-
Konstruktor(name: String, kapazitaet: int) … Name darf nicht null oder "blank" (siehe
Buch
) sein. -
Konstruktor(name: String) … verwendet Kapazität 10
-
Getter für Name … Setter hier nicht zwingend nötig, da nachträgliche Änderung nicht vorgesehen. Prüfung kann direkt im Konstruktor erfolgen.
-
toString() … wird automatisch aufgerufen, wenn Klasse aufgerufen wird, wo Text erwartet wird
-
equals(other: Buch) … hier sind alle Eigenschaften zu vergleichen. Eine einzige Abweichung bewirkt schon die Rückgabe von
false
-
compareTo(other: Buch) … Bücher sind primär nach
titel
, bei gleichem Titel nachautor
, bei gleichemautor
undtitel
nachpublJahr
und notfalls noch nachverlag
zu vergleichen.
Rückgabe von 0 bei Gleichheit, negativer Wert, wenn this.wert 'kleiner' als other.wert, positiv bei umgekehrter Sachlage.
Spezifisch
-
erfasseBuch(buch: Buch) … fügt Buch hinzu. Prüfen auf
null
und sicherstellen, dass VerlagverlagPasst(…)
true
liefert -
verlagPasst(buch: Buch): boolean … prüft, ob der Verlag im übergebenen Buch dem aktuellen Verlag entspricht.
-
schonErfasst(buch: Buch): boolean … sicherstellen, dass nicht gleiches Buch schon in Liste
Sortieren
-
findMinValPos(anfIdx: int, endIdxExcl: int) … Hilfsmethode für SelectionSort im Buecher-Array. anfIdx - ab dieser Position wird gesucht; endIdxExcl: bis zu dieser (excl → letzter Index eins davor!)
-
tauschen(idx0: int, idx1: int) … Hilfsmethode für Dreieckstausch im Buecher-Array
-
selectionSort() … Einfache Umsetzung des SelectionSort bei Verwendung obiger Hilfsmethoden.
-
buecherSortieren() … Ruft einfach nur
selectionSort()
auf (alternativ z.B. bubbleSort).
Ausgabe + Filtern
-
printBuecher(ueberschrift: String) … gibt alle Bücher aus (unterhalb von freeIdx!!!)
-
printBuecherWoTitelEnthaelt(teilstueck: String) … gibt alle Bücher aus, die im Titel die Zeichenfolge in Param
teilstueck
enthalten.
TESTEN (statische Methode!)
-
static void testen() … Erzeugen von 2 gültigen Instanzen, um alle Methoden zu prüfen. Zur Prüfung der Setter auch ungültige Fälle testen, um alle Fehlermeldungen zu produzieren.
3. Klasse Bibliothek
In vielen Bereichen analog zu Verlag …
Standard-Elemente
-
Konstruktor(kapazitaet: int) … selbsterklärend
-
toString(): String … gibt Anzahl der enthaltenen Bücher aus
Array-Verwaltung
-
add(buch: Buch): boolean … nimmt das Buch in die Sammlung auf
-
remove(buch: Buch): Buch … entfernt das Buch (Lücke schließen nicht vergessen!)
Sortieren
-
findMinValPos(anfIdx: int, endIdxExcl: int): int … analog zu Verlag
-
tauschen(idx0: int, idx1: int) … analog zu Verlag
-
selectionSort() … analog zu Verlag
-
buchPoolSortieren() … analog zu Verlag
Ausgabe + Filtern
-
printBuecher() … Alle Bücher ausgeben (toString-Methode wird automatisch verwendet, wenn Objekt ohne Methode in textuellem Kontext vorkommt)
-
printBuecherVonAutor(namensteil: String) … nach angegebenem Autor-Namensteil) filtern
-
printBuecherVonVerlag(verlag: Verlag) … nach angegebenem Verlag filtern
-
printBuecherJuengerAb(jahrIncl: int) … alles ab incl. dem gegebenen Jahr (Richtung zu jünger)
-
printBuecherWoTitelEnthaelt(teilstueck: String) … analog zu
Verlag
TESTEN (statische Methode!)
-
static void testen() … analog zu
Verlag