エラー:「スレッドの例外」メイン「java.lang.classcastexception:manycard.main $カードはjava.lang.comparableにキャストできません」

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

質問

ちょっとみんな。 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)を使用するには、並べ替えているオブジェクトは比較可能なインターフェイスを実装する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top