2013-11-09 1 views
0

Я работаю над назначением класса, которое принимает фамилию, имя и оценку для одного или нескольких студентов, сохраняет их в массиве и затем сортирует по алфавиту по фамилии (или имени если фамилия совпадает). Мы должны использовать класс Student, который реализует интерфейс Comparable. Как только я доберусь до части кода Arrays.sort, я получаю исключение ClassCastException, в котором говорится, что «Студент не может быть переведен в java.lang.Comparable». Я искал и рассмотрел, попытался использовать implements Comparable<Student>, Clean and Build, но ошибка сохраняется. Любая помощь или намеки приветствуются.Ошибка Java ClassCastException с помощью интерфейса Comparable, несмотря на реализацию

ошибка:

Exception in thread "main" java.lang.ClassCastException: 
studentscoreapp.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 studentscoreapp.StudentScoreApp.main(StudentScoreApp.java:35) 
Java Result: 1 BUILD SUCCESSFUL (total time: 12 seconds) 

Вот мой студент класс:

public class Student implements Comparable 
{ 

private String lastName; 
private String firstName; 
private int score; 

public Student(String fName, String lName, int s) 
    { 
    fName = firstName; 
    lName = lastName; 
    s = score; 
    } 

public String getLastName() 
    { 
    return lastName; 
    } 

public void setLastName(String lastName) 
    { 
    this.lastName = lastName; 
    } 

public String getFirstName() 
    { 
    return firstName; 
    } 

public void setFirstName(String firstName) 
    { 
    this.firstName = firstName; 
    } 

public int getScore() 
    { 
    return score; 
    } 

public void setScore(int score) 
    { 
    this.score = score; 
    } 

@Override 
public int compareTo(Object obj) 
    { 
    Student sent = (Student) obj; 
    if (sent.lastName.equals(this.lastName)) 
    { 
    return this.firstName.compareToIgnoreCase(sent.firstName); 
    } 
    else return this.lastName.compareToIgnoreCase(sent.lastName); 
    } 

@Override 
public String toString() 
    { 
    return lastName + firstName + score; 
    } 
} 

сопоставимом интерфейс:

public interface Comparable 
{ 

int compareTo(Object obj); 
} 

и моя главная:

import java.util.Arrays; 

общественного класса StudentScoreApp {

public static void main(String[] args) 
    { 
    String firstName; 
    String lastName; 
    int score; 

    System.out.println("Welcome to the Student Scores Application"); 
    int numStudents = Validation.getInt("Enter # of Students: "); 
    Student[] studentArray = new Student[numStudents]; 

    int i; 
    for (i = 0; i < numStudents; i++) 
     { 
     firstName = Validation.getString("Student [" + (i + 1) + "] first name: "); 
     lastName = Validation.getString("Student [" + (i + 1) + "] last name: "); 
     score = Validation.getInt("Student [" + (i + 1) + "] score: ", 0, 100); 
     studentArray[i] = new Student(firstName, lastName, score); 
     } 


    Arrays.sort(studentArray); //line 35 

    System.out.println(); 

    //take each obj of the array and print the student info 
    for (Student obj : studentArray) 
     { 
     System.out.println(obj.toString()); 
     } 

    } 
} 
+0

Первое, что нужно узнать, это то, что трассировка стека является наиболее важной частью диагностической/судебной информации. Вы должны включить трассировку стека в свой вопрос. – JimN

+0

Для дальнейшего использования вы можете/должны отредактировать свой вопрос, чтобы добавить дополнительную информацию (т. Е. Трассировку стека). – JimN

+0

Спасибо, Джим. Я добавил след стека к вопросу после того, как вы разместили его здесь как комментарий. Чтобы избежать дублирования и путаницы, я удаляю его из предыдущего комментария. – user2971045

ответ

3

Arrays.sort() принимает массив объектов, которые являются подтипами java.lang.Comparable. В вашем коде вы создали свой собственный интерфейс Comparable, который, в то время как он ведет себя так же, как java.lang.Comparable, это не тот же интерфейс.

+0

Итак, как я могу сделать так, чтобы он использовал мой интерфейс? (и спасибо;) – user2971045

+0

@ user2971045 У вас нет. Вы переключаетесь на интерфейс Java со сравнимыми данными – Tyler

+0

Думаю, мне нужно уточнить требования к назначению с моим учителем. Нам сказали создать интерфейс Comparable, реализовать его в классе Student и переопределить метод compareTo для нашего собственного сортировки. Спасибо за вашу помощь, @Tyler и JimN. – user2971045

 Смежные вопросы

  • Нет связанных вопросов^_^