publicstaticclassBook{// Das ist die Klasse Book die man in Übung 3 erstellen sollte, allerdings erweitert durch einen KonstruktorprivateString titel;privateString autor;privateint isbn;privatedouble preis;publicBook(String titel,String autor,int isbn,double preis){this.titel = titel;this.autor = autor;this.isbn = isbn;this.preis = preis;}}
Jetzt möchte ich die Buchtitel von buch1, buch2 und buch3 sortieren und zwar entweder nach Titel Autor, Isbn oder nach Preis.
Wie man lexikographisch sortiert weiß ich ( compareTo() ), allerdings habe ich probleme bei der Umsetzung.
aber ich hab ja drei bücher und möchte die titel der bücher über eines der vier attribute soriteren?
der code von javimka kann doch nur 2 bücher mit einander vergleichen oder ?
Möchtest du nun nach Titel sortieren oder nach einem der anderen Attribute? Wie auch immer, in jedem Fall musst du diese Sortierreihenfolge in der Implementierung von compareTo() umsetzen. Stelle zunächst eine priorisierte Liste der Sortierkriterien auf.
Edit: ah, jetzt verstehe ich deine Frage erst (hoffe ich). Das sortieren nimmt dir die Collections.sort()-Methode ab. Mit dem Comparable-Interface definierst du die dafür benötigte Ordnungsrelation auf deinen Bücher-Objekten.
Ja, aber jeder Sortieralgorithmus bricht das Sortieren einer Menge von Objekten auf den Vergleich der Nachbarn miteinander herunter. Sortierte Collections aus dem JDK erfordern in der Regel deshalb eine Implementierung des Interface Comparable (nennt sich natural ordering) oder die Übergabe eines Comparator.
Comparable korrekt implementieren - in javimkas Implementierung fehlt zum Beispiel die Zusatzanforderung Bücher mit selbem Titel nach Autor, ISBN-Nummer und Preis weiter zu ordnen -; alle Bücher in ein TreeSet stecken;[ TreeSet ausgeben;] fertig.
o.ä. die den Titel zurück gibt, dann kannst Du in compare book.getTitle() aufrufen.
title ist nämlich ein private Member der Klasse Book und kann somit von aussen nicht gesehen werden.
Book a =newBook("Buch A","Mr. A","1234567890");Book b =newBook("Buch B","Mr. B","0234567891");Book c =newBook("Buch C","Mr. C","1034567892");List<Book> list =newArrayList<Book>();
list.add(a);
list.add(b);
list.add(c);Collections.sort(list);for(Book book : list){System.out.println(book.getTitle()+" "+ book.getAuthor()+" "+ book.getIsbn());}
Die Methoden- und Konstruktorsignaturen deines Codes habe ich jetzt nicht nachgeschaut, das Ganze ist ja nur ein Beispiel.