Java CompareTO方法问题

时间:2014-02-17 16:24:37

标签: java

我正在尝试用一个简单的java程序来标记一个简单的学生列表,但是我得到了

  

线程“main”中的异常java.lang.ClassCastException:Student无法强制转换为java.lang.Comparable

public class Student {
public String name;
public int mark;


public Student(String name, int mark){
    this.name=name;
    this.mark=mark;
}


public int compareTo(Student o){
    return this.mark-o.mark;


}
public String toString(){
    String s = "Name: "+name+"\nMark: "+mark+"\n";
    return s;
}

public static void main(String[] args) {
    Student Class[] = new Student[9];
    Class[0] = new Student("Henry",100);
    Class[1] = new Student("Alex", 10);
    Class[2] = new Student("Danielle",100);
    Class[3] = new Student("Luke",10);
    Class[4] = new Student("Bob",59);
    Class[5] = new Student("Greg",76);
    Class[6] = new Student("Cass",43);
    Class[7] = new Student("Leg",12);
    Class[8] = new Student("Bobe",13);



    Arrays.sort(Class);
    for(int i = 0;i<Class.length;i++){
        System.out.println(Class[i]);

2 个答案:

答案 0 :(得分:5)

您的Student班级必须实施Comparable界面才能使用Arrays#sort传递Student[]数组。您的类当前具有compareTo方法这一事实并不意味着它实现了此接口,您必须声明:

public class Student implements Comparable<Student> {
    //class definition...
}

答案 1 :(得分:4)

制作Student班级工具Comparable<Student>。 <{1}}方法在排序时不起作用。

此外,compareTo()看起来不是一个非常好的变量名称。如何使用Class?另外,我在您的students方法中看到了一个问题:

compareTo

永远不要比较减去2个整数或长整数的结果。结果可能会溢出。而是使用Integer.compare(int, int)方法 另外,摆脱public int compareTo(Student o){ return this.mark-o.mark; } 字段。让他们public,并提供private获取者访问它们。