Ошибка: «Исключение в потоке «main» java.lang.ClassCastException: manycard.Main$ Card не может быть преобразован в java.lang.Сопоставимый»

#java #classcastexception #playing-cards

#java #classcastexception #игральные карты

Вопрос:

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

Ответ №1:

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

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

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

Ответ №2:

Card необходимо реализовать сопоставимый интерфейс, в частности метод compareTo.

Ответ №3:

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

Ответ №4:

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