#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), объект, который вы сортируете, должен реализовывать сопоставимый интерфейс.