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