2010-12-14 20 views
1

J'essaie d'écrire un programme pour mon cours qui trie un tableau d'objets.Java: Utilisation de l'erreur Array.sort() - java.lang.ClassCastException: l'étudiant ne peut pas être converti en java.lang.Comparable

Est-ce que quelqu'un sait pourquoi je reçois cette erreur? Des extraits de code inclus ci-dessous!

objet étudiant

/* 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(); 
    } 

}

Et mettre ces étudiants dans les marques de tableau (d'objets d'étudiants);

//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); 
    } 

Cependant le genre ne semble pas fonctionner

//Sorting 
Arrays.sort(marks); 

et produit l'erreur:

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) 

Et produire l'erreur

Répondre

7
public class Student implements Comparable<Student> { 
    ... 
} 
3
public class Student implements Comparable<Student> { } 

En outre, votre méthode compareTo() est un peu peu orthodoxe. Généralement, vous voulez quelque chose comme suit:

 public int compareTo(Student gStudent) { 
     if(this.mark > gStudent.getMark()) return 1; 
     if(this.mark < gStudent.getMark()) return -1; 
     return 0; 
    }