Fehler: "Ausnahme im Thread" Haupt "java.lang.classcastexception: misgecard.main $ card kann nicht an java.lang.lang.comparable abgegeben werden"
-
27-10-2019 - |
Frage
Hey alle zusammen. Ich versuche, eine Array von Ganzzahlen mit der Array.Sort -Methode zu sortieren, und ich erhalte immer wieder den oben genannten Fehler. Ich habe Beispiele für diese verwendete Methode nachgeschlagen und verwende dieselbe Syntax. Da ich sicher bin, dass es notwendig sein wird, ist hier der Stück Code, den ich verwende:
public class Card
{
int suit, rank;
public Card () {
this.suit = 0; this.rank = 0;
}
public Card (int suit, int rank) {
this.suit = suit; this.rank = rank;
}
}
class Deck {
Card[] cards;
public Deck (int n) {
cards = new Card[n];
}
public Deck () {
cards = new Card[52];
int index = 0;
for (int suit = 0; suit <= 3; suit++) {
for (int rank = 1; rank <= 13; rank++) {
cards[index] = new Card (suit, rank);
index++;
}
}
}
public int median (Deck deck) {
Arrays.sort(deck.cards);
return deck.cards[2].rank;
}
Lösung
Dein Card
Die Klasse muss implementiert werden Comparable<Card>
. Dies ist erforderlich, damit die Arrays.sort
Methode kann die aufrufen compareTo(Card card)
Methode, die Sie implementieren werden Card
und machen Sie die Sortierung basierend auf seinem Rückgabewert.
Von dem Dokumentation, compareTo
macht Folgendes:
Vergleicht dieses Objekt mit dem angegebenen Objekt für die Ordnung. Gibt eine negative Ganzzahl, Null oder eine positive Ganzzahl zurück, da dieses Objekt geringer ist als das angegebene Objekt.
Andere Tipps
Die Karte muss die vergleichbare Schnittstelle implementieren, insbesondere die Vergleichsmethode.
Du rufst an Arrays.sort
an deck.cards
Das ist eine Reihe von Kartenobjekten, keine Reihe von ganzen Zahlen. Ihre Kartenklasse muss vergleichbar implementiert werden.
Um Arrays.sort (Object [] O) zu verwenden, muss das von Ihnen sortierende Objekt die vergleichbare Schnittstelle implementieren.