2014-02-17 65 views
0

我試圖理清學生的簡單列表用一個簡單的Java程序,但是我得到的線索的Java compareTo方法發出

異常標記「主要」 java.lang.ClassCastException:學生不能投到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]); 
+3

學生課應該實現可比較的界面 – Batty

回答

5

Student必須實現Comparable接口,以便使用Arrays#sort路過Student[]數組。您的類現在有一個compareTo方法並不意味着它實現了這個接口的事實,你必須聲明這樣的:

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

當然,我一直忘記把放在最後。 – Softey

4

讓您Student類實現Comparable<Student>。排序時,compareTo()方法在其自身上無法正常工作。

此外,Class看起來不是一個非常好的變量名稱。如何使用students?另外,我看到你的compareTo方法的問題:

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

上的2個整數,或多頭減的結果決不比較。結果可能會溢出。而是使用Integer.compare(int, int)方法。
另外,擺脫public字段。讓他們private,並提供public獲取者訪問它們。