überschreiben Sie die abstrakte Methode compare()
Hi ich bin einigermaßen neu zu Programmieren und ich habe Schwierigkeiten mit meiner Methode vergleichen, ich habe mehrere Klassen, meine erste Frage ist, mit meinen Eltern-Klasse.
Bekomme ich diesen Fehler:
Person is not abstract and does not override Methode compare(java.lang.Object, java.lang.Objekt) im Komparator
public class Person implements Comparator
{
//some methods
public int compare(Person p1, Person p2)
{
//if last names are the same compare first names
if(p1.getLastName().equals(p2.getLastName()))
{
return p1.getFirstName().compareTo(p2.getFirstName());
}
return p1.getLastName().compareTo(p2.getLastName());
}
Mein Kind Klasse sieht einige Sache wie diese:
public class Player extends Person implements Comparator
{
//some methods
public int compare(Player p1, Player p2)
{
if(p1.getGamesPlayed()<p2.getGamesPlayed())
{
return -1;
}else if (p1.getGamesPlayed()==p2.getGamesPlayed())
{
return 0;
}else
{
return 1;
}
}
Ich habe auch ein club-Klasse, die speichert alle Informationen in einer ArrayList<Player>
team.
mein interface :
public interface Comparator<T>
{
int compare(T o1, T o2);
}
und ich habe auch diese Klasse
public class ComparePlayers implements Comparator<Player>
{
public int compare(Player p1, Player p2)
{
if(p1.getGamesPlayed()< p2.getGamesPlayed())
{
return -1;
}else if(p1.getGamesPlayed()== p2.getGamesPlayed())
{
return p1.getLastName().compareTo(p2.getLastName());
}else
{
return 1;
}
}
ist die Skillung für diese ist:
Wenn ein neuer Spieler unterschrieben ist, kann Sie/er sollte eingefügt werden, in der Club-Klasse in alphabetischer Reihenfolge der Nachnamen (nach-und Vorname, wenn der Nachname sind identisch). Um dies zu tun machen Sie Ihre Person und Spieler-Klassen implementieren das entsprechende Vergleichbare Schnittstelle.
Schreiben Sie eine Klasse ComparePlayers, setzt der Komparator<Player>
- Schnittstelle. Es sollte vergleichen Spieler durch die Anzahl der gespielten Spiele (und dann durch die alphabetische Reihenfolge der Familiennamen, wenn die Anzahl der gespielten Spiele ist die gleiche). Implementiere einen neuen Konstruktor für die Club-Klasse, nimmt einen Komparator<Player>
parameter. Daher schreiben Sie ein main Programm, das drucken von Informationen über jeden Spieler in den club, wo die Spieler aufgelistet sind, in absteigender Reihenfolge der Spiele gespielt. Damit sollte die Bestellung diktiert werden durch das Hauptprogramm, ohne den code ändern, in allen anderen Klassen.
Tut mir Leid, wenn dies ist lange umständlich, aber ich bin kämpfen, um zu sehen, was falsch ist, ich habe versucht, verschiedene Variationen und es will einfach nicht funktionieren. dies ist am Freitag, nur ein push in die richtige Richtung wäre enorm geschätzt.
InformationsquelleAutor Cjb1982 | 2011-04-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern Sie Ihre vergleichen Implementierung:
widersprechen: besser Generika für Kompilierung die Typüberprüfung, als die OP bereits tut, mit seinem Komparator<Player>.
Ich Stimme zu
Bearbeiten Sie Ihre Antwort, und ich werde bis Abstimmung.
OP ist Ihr
InformationsquelleAutor Mark Pope
Person
undPlayer
nicht implementieren sollteComparator
. Wenn Sie müssen vergleichbar sein, die von einigen natürlichen Ordnung, die Sie implementieren solltenComparable
.Ihre
ComparePlayers
- Klasse, sieht gut aus, was ist das Problem? (Ich nehme an, du bist mitjava.util.Comparator
hier, nicht wahr?)Um die Liste zu Sortieren könnten Sie
Collections.sort(players, new ComparePlayers());
, wennplayers
ist der TypList<Player>
(resp. eine Implementierung der Schnittstelle).Beachten Sie, dass, wenn
Person
undPlayer
sollteComparable
, dann würden Sie brauchen, zu implementierencompareTo(Person p2)
undcompareTo(Player p2)
wo die Implementierung für den Spieler nennen sollsuper.compareTo(p2);
für die gleichen Spiele gespielt Fall.Beispiel:
Oh, ja, du hast Recht, die Festsetzung der Beispiel.
InformationsquelleAutor Thomas
Die compare-Methode eines Comparator nimmt zwei Objekt-Parameter, während Sie Ihre Methode nimmt zwei-Personen-Parameter, und so kann der compiler nicht finden, wo man das überschreiben dieser Methode. Die Lösung ist, ändern Sie entweder die Parameter der Methode werden Objekte oder anderes (und vorzugsweise) verwenden einen generischen Comparator, da diese Ihnen erlaubt Ihre Methode vergleichen, um zu haben, Person Parameter und fügt auch die type-safety überprüfung zur compile-Zeit.
edit 1: zu Schießen, haben Sie bereits ein Beispiel für eine generische Vergleichbaren Klasse.
edit 2: ich habe nicht gesehen, dass Sie erstellen Ihre eigene Schnittstelle bis ich Lesen Sie den Kommentar über diesem. Ich Stimme dem Kommentator zu-verwenden Sie die Klasse bereits in java.util.
InformationsquelleAutor Hovercraft Full Of Eels
Wie die exception schlägt vor, diese Erklärung
public int compare(Person p1, Person p2)
geändert werden
public int compare(Object p1, Object p2)
Dann wirst du auch anpassen müssen, die Methode code als
InformationsquelleAutor Ilya Saunkin