Ошибка: «Исключение в потоке» Основное «java.lang.classcastexception: manycard.main $ card не может быть поднята на 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 Это множество объектов карты, а не множество целых чисел. Ваш класс карт должен реализовать сопоставимые.

Чтобы использовать Arrays.sort (Object [] o), объект, который вы сортируете, должен реализовать сравниваемый интерфейс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top