Ошибка: исключение в потоке main java.lang.ClassCastException: manycard.Main$Card не может быть приведено к java.lang.Comparable

Всем привет. Я пытаюсь отсортировать массив целых чисел с помощью метода 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;
}

person James    schedule 02.05.2011    source источник


Ответы (4)


Ваш класс Card должен реализовать Comparable<Card>. Это необходимо для того, чтобы метод Arrays.sort мог вызывать метод compareTo(Card card), который вы реализуете в Card, и выполнять сортировку на основе возвращаемого значения.

Из документации , compareTo делает следующее:

Сравнивает этот объект с указанным объектом для порядка. Возвращает отрицательное целое число, ноль или положительное целое число, поскольку этот объект меньше, равен или больше указанного объекта.

person AbdullahC    schedule 02.05.2011

Карта должна реализовать интерфейс Comparable, в частности, метод compareTo.

person ditkin    schedule 02.05.2011

Вы вызываете Arrays.sort для deck.cards, который представляет собой массив объектов Card, а не массив целых чисел. Ваш класс Card должен реализовать сопоставимый.

person debracey    schedule 02.05.2011

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

person Zach    schedule 02.05.2011