Я работаю над назначением класса, которое принимает фамилию, имя и оценку для одного или нескольких студентов, сохраняет их в массиве и затем сортирует по алфавиту по фамилии (или имени если фамилия совпадает). Мы должны использовать класс 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());
}
}
}
Первое, что нужно узнать, это то, что трассировка стека является наиболее важной частью диагностической/судебной информации. Вы должны включить трассировку стека в свой вопрос. – JimN
Для дальнейшего использования вы можете/должны отредактировать свой вопрос, чтобы добавить дополнительную информацию (т. Е. Трассировку стека). – JimN
Спасибо, Джим. Я добавил след стека к вопросу после того, как вы разместили его здесь как комментарий. Чтобы избежать дублирования и путаницы, я удаляю его из предыдущего комментария. – user2971045