Errore: "Eccezione nel thread" Main "java.lang.classcastException: ManyCard.Main $ Card non può essere scelto su java.lang.Comparable"
-
27-10-2019 - |
Domanda
Ciao a tutti. Sto cercando di ordinare una serie di numeri interi usando il metodo Array.Sort e continuo a ottenere l'errore sopra. Ho cercato esempi di questo metodo in uso e sto usando la stessa sintassi. Perché sono sicuro che sarà necessario, ecco il pezzo di codice che sto usando:
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;
}
Soluzione
Tuo Card
La classe deve implementare Comparable<Card>
. Questo è necessario in modo che il Arrays.sort
Il metodo può chiamare il file compareTo(Card card)
metodo che implementerai in Card
e eseguire l'ordinamento in base al suo valore di ritorno.
Dal documentazione, compareTo
Fa quanto segue:
Confronta questo oggetto con l'oggetto specificato per l'ordine. Restituisce un numero intero negativo, zero o un numero intero positivo in quanto questo oggetto è inferiore a, uguale o maggiore dell'oggetto specificato.
Altri suggerimenti
La scheda deve implementare l'interfaccia comparabile, in particolare il metodo di confronto.
Chiami Arrays.sort
Su deck.cards
Questa è una serie di oggetti della carta, non una serie di numeri interi. La tua classe di carte deve implementare comparabile.
Per utilizzare Arrays.Sort (Object [] O), l'oggetto che stai ordinando deve implementare l'interfaccia comparabile.