Java: ошибка Array.sort () - java.lang.ClassCastException: ученика нельзя преобразовать в java.lang.Comparable - PullRequest
1 голос
/ 14 декабря 2010

Я пытаюсь написать программу для моего курса, которая сортирует массив объектов.

Кто-нибудь знает, почему я получаю эту ошибку?Ниже приведены фрагменты кода!

Объект ученика

/* Class for storing students */
public class Student {
  private String name;
  private int mark;

  //Constructor
  public Student(String gName, int gMark) {
    name = gName;
    mark = gMark;
  }

  //Get Mark  
    public int getMark() {
    return mark;
  }
  //Compare to
   public int compareTo(Student gStudent) {
    return this.mark - (int) gStudent.getMark();
  }

}

И размещение этих учеников в массиве отметок (объектов учеников);

Однако сортировка не работает

//Sorting
Arrays.sort(marks);

И выдает ошибку:

Exception in thread "main" java.lang.ClassCastException: Student cannot be cast to java.lang.Comparable
    at java.util.Arrays.mergeSort(Arrays.java:1144)
    at java.util.Arrays.sort(Arrays.java:1079)
    at MarkAnalysis.main(MarkAnalysis.java:33)

И выдает ошибку

Ответы [ 2 ]

7 голосов
/ 14 декабря 2010
public class Student implements Comparable<Student> {
  ...
}
3 голосов
/ 14 декабря 2010
public class Student implements Comparable<Student> { }

Кроме того, ваш метод compareTo () немного неортодоксален. Как правило, вы хотите что-то вроде этого:

     public int compareTo(Student gStudent) {
        if(this.mark > gStudent.getMark()) return 1;
        if(this.mark < gStudent.getMark()) return -1;
        return 0;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...