エラー:「スレッドの例外」メイン「java.lang.classcastexception:manycard.main $カードはjava.lang.comparableにキャストできません」
-
27-10-2019 - |
質問
ちょっとみんな。 Array.sortメソッドを使用して、整数の配列を並べ替えようとしています。上記のエラーを取得し続けています。使用中のこの方法の例を調べて、同じ構文を使用しています。私はそれが必要になると確信しているので、ここに私が使用しているコードのビットがあります:
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;
}
解決
君の Card
クラスは実装する必要があります Comparable<Card>
. 。これが必要です Arrays.sort
メソッドを呼び出すことができます compareTo(Card card)
実装する方法 Card
また、返品値に基づいてソートを行います。
から ドキュメンテーション, compareTo
以下は次のとおりです。
このオブジェクトを指定されたオブジェクトと順序に比較します。このオブジェクトは、指定されたオブジェクトよりも少ない、等しい、または大きいため、負の整数、ゼロ、または正の整数を返します。
他のヒント
カードは、比較可能なインターフェイス、特に比較方法を実装する必要があります。
あなたが呼ぶ Arrays.sort
の上 deck.cards
それは一連のカードオブジェクトであり、整数の配列ではありません。カードクラスは同等の実装を実装する必要があります。
array.sort(object [] o)を使用するには、並べ替えているオブジェクトは比較可能なインターフェイスを実装する必要があります。
所属していません StackOverflow