Fehler: "Ausnahme im Thread" Haupt "java.lang.classcastexception: misgecard.main $ card kann nicht an java.lang.lang.comparable abgegeben werden"

StackOverflow https://stackoverflow.com/questions/5852719

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;
}
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top