![]() |
| | Themen-Optionen |
| | Nach oben #1 |
| Benutzer Registriert seit: 23.11.2005 Ort: Aachen
Beiträge: 31
|
Hallo! Irgendwie versuche ich gerade das Comparable Interface zu implementieren und irgenwie klappt es nicht, was mache ich falsch? Code: public class Buch implements Comparable{
String autor;
public Buch(String a){
System.out.println(a);
}
public int compareTo(Buch b) {
return autor.compareTo(b.getAutor());
}
public String getAutor() {
return autor;
}
public void setAutor(String autor) {
this.autor = autor;
}
}
|
| | |
| | Nach oben #2 |
| Benutzer Registriert seit: 15.11.2005
Beiträge: 75
|
compareTo muss als Parmeter ein Object akzeptieren, um das Interface zu implementieren. Code: public int compareTo( Object o) {
if ( ! (o instanceof Buch) throw new IllegalArgumentException( "Expected Buch, got " + o);
return autor.compareTo( ((Buch)o).autor);
}
|
| | |
| | Nach oben #3 |
| Benutzer Registriert seit: 23.11.2005 Ort: Aachen
Beiträge: 31
|
Vielen Dank! Nun habe ich aber das nächste Problem! Ich wollte dieses Buch in eine ArrayList einfügen und dann sortiert wieder auslesen! Code: import java.util.ArrayList;
import java.util.Collections;
public class Sortieren{
public static void main(String[] args) {
ArrayList<Buch> s = new ArrayList<Buch>();
Buch st = new Buch("delta");
Buch st1 = new Buch("aber");
Buch st2 = new Buch("beta");
s.add(st);
s.add(st1);
s.add(st2);
Collections.sort(s);
for (Object r:s){
System.out.println(r);
}
}
}
Exception in thread "main" java.lang.NullPointerException at scjp.Buch.compareTo(Buch.java:13) at java.util.Arrays.mergeSort(Unknown Source) at java.util.Arrays.sort(Unknown Source) at java.util.Collections.sort(Unknown Source) at scjp.Sortieren.main(Sortieren.java:16) |
| | |
| | Nach oben #4 |
| Benutzer Registriert seit: 15.11.2005
Beiträge: 75
|
Problem: Du übergibst in der Klasse Buch im Konstruktor zwar einen String, weist ihn aber nicht dem Field zu: Besser: Code: public Buch( String a) {
setAutor( a);
}
Alternativ könnten man auch im compareTo abfragen, ob in beiden Objekten der String auch korrekt zugewiesen wurde. |
| | |
| | Nach oben #5 |
| Benutzer Registriert seit: 23.11.2005 Ort: Aachen
Beiträge: 31
|
Nun noch eine Frage! Wenn ich jetzt statt dem Comparable Interface, das Comparator Interface benutzte, ist es dann sinnvoll die compare()-Methode in der Klasse Buch zu implementieren oder wäre es sinnvoller dies außerhalb zu tun, sprich ein separates Objekt dafür zu erstellen, das ich dann an die sort()-Methode übergebe? Untenstehend mein Versuch! Ist es so sinnvoll? Code:
import java.util.Comparator;
public class Buch implements Comparator{
String autor;
public Buch(String a){
setAutor( a);
}
public String getAutor() {
return autor;
}
public void setAutor(String autor) {
this.autor = autor;
}
public int compare(Object o1, Object o2) {
return (((Buch)o1).getAutor().compareTo(((Buch)o2).getAutor()));
}
}
public class Sortieren{
public static void main(String[] args) {
ArrayList s = new ArrayList();
Buch st = new Buch("delta");
Buch st1 = new Buch("aber");
Buch st2 = new Buch("beta");
s.add(st);
s.add(st1);
s.add(st2);
Collections.sort(s, st);
for (Object r:s){
System.out.println(((Buch)r).getAutor());
}
}
}
|
| | |
| | Nach oben #6 |
| Erfahrener Benutzer Registriert seit: 28.08.2004 Ort: konstanz am bodensee
Beiträge: 190
|
den Comperator solltest du in eine eigene klasse auslagern... z.b. BuchComperator. der vorteil vom comparator ist, das man die klasse nicht mit methoden belastet, die eigentlich nichts mit ihrer aufgabe zu tun haben... unter java5 sollte der Comparator etwa so aussehen... Code: public class BuchComperator implements Comparator<Buch> {
public int compare(Buch o1, Buch o2) {
// den vergleich machen
return 0;
}
}
Code: public class BuchComperator implements Comparator{
public int compare(Object o1,Object o2) {
// den vergleich machen
return 0;
}
}
der sortier vorgang sieht dann so aus Code: Collections.sort(bookCollection,new BookComparator()); Code: Arrays.sort(bookArray,new BookComparator()); |
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Aktualisierung des Forenplugins vBSEO auf Version 3.0.0 gold | Ben | Ankündigungen | 7 | 30.05.2007 13:59 |
| Pong Klon | hii | Allgemeine Java-Programmierung | 0 | 07.08.2005 08:25 |
| Koordinate des Mausklicks erfahren | `B | Desktop-Applikationen und Grafik | 1 | 25.07.2004 14:24 |