[英]Java: Using Array.sort() error - java.lang.ClassCastException: Student cannot be cast to java.lang.Comparable
I am trying to write a program for my course that sorts an array of objects. 我正在尝试为我的课程编写一个对对象数组进行排序的程序。
Does anyone know why I am getting this error? 有人知道我为什么收到此错误吗? Snippets of code included below! 代码片段包含在下面!
Student object 学生对象
/* 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();
}
} }
And putting these students in the array marks (of student objects); 并将这些学生置于(学生对象的)阵列标记中;
//Create array
Student[] marks = new Student[numberOfMarks];
//Input for each student
for (int cItem = 0; cItem < numberOfMarks; cItem++) {
System.out.print("Please enter student number "+(cItem + 1)+"'s name: ");
String cName = markScanner.nextLine();
System.out.print("Please enter "+cName+"'s mark: ");
int cMark = markScanner.nextInt();
//Skip line
markScanner.nextLine();
marks[cItem] = new Student(cName, cMark);
}
However the sort doesn't seem to work 但是排序似乎不起作用
//Sorting
Arrays.sort(marks);
And produces the error: 并产生错误:
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)
And produce the error 并产生错误
public class Student implements Comparable<Student> {
...
}
public class Student implements Comparable<Student> { }
Also, your compareTo() method is a bit unorthodox. 另外,您的compareTo()方法有点不合常规。 Typically, you want something along these lines: 通常,您需要遵循以下原则:
public int compareTo(Student gStudent) {
if(this.mark > gStudent.getMark()) return 1;
if(this.mark < gStudent.getMark()) return -1;
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.