只是想知道这个错误意味着什么以及我应该如何解决这个问题。
错误:类型Student必须实现继承的抽象方法java.lang.Comparable.compareTo(java.lang.Object)
我正在尝试实现这个,所以我可以使用类的compareTo方法。
非常感谢你的帮助!
import java.util.*;
import java.io.*;
public class Student implements Comparable
{
private String name;
private double gpa;
public Student()
{
name = "";
gpa = 0.0;
}//end default constructor
public Student(String n, double g)
{
name = n;
gpa = g;
}//end two arg constructor
public double getGPA()
{
return gpa;
}
public String getName()
{
return name;
}
public void setGPA(double g)
{
this.gpa = g;
}
public void setName(String n)
{
this.name = n;
}
public String toString()
{
return " Name: " + name + " GPA: " + gpa;
}
public static void compareTo()
{
}
}//end class
答案 0 :(得分:2)
您所要做的就是实现类似的接口并覆盖您想要排序的类中的compareTo()方法。在compareTo方法中,您必须提到您的对象应该在哪个基础上进行排序。以下代码将对此有所帮助:
public class Student implements Comparable<Student>
{
private String name;
private double gpa;
public Student()
{
name = "";
gpa = 0.0;
}//end default constructor
public Student(String n, double g)
{
name = n;
gpa = g;
}//end two arg constructor
public double getGPA()
{
return gpa;
}
public String getName()
{
return name;
}
public void setGPA(double g)
{
this.gpa = g;
}
public void setName(String n)
{
this.name = n;
}
public String toString()
{
return " Name: " + name + " GPA: " + gpa;
}
public Integer compareTo(Student student)
{
// if object is getting sorted on the basis of Name
return this.getName().compareTo(student.getName())
// if object is getting sorted on the basis of gpa
return Double.valueOf(this.gpa).compareTo(Double.valueOf(student.getGPA()));
}
}//end class
由于您使用的是原始数据类型double而不是Object Double,因此我们需要使用Double.valueOf(this.gpa)来获取对象 您应该根据您的要求只使用一个return语句。
答案 1 :(得分:0)
您必须对代码进行以下更改才能正确实现Comparable
接口。
(1)指定与您的类相似的对象类型:
public class Student implements Comparable<Student>
(2)compareTo
方法的相应签名如下:
public int compareTo(Student other)
当然,你也必须实现compareTo
方法的主体。
this
实例比参数other
“小”,则compareTo
应返回否定号。this
实例比参数other
“更大”,则compareTo
应返回正号。this
实例被认为与参数other
“具有相同的值”,则compareTo
应返回0
。您可以参考official java document了解有关实施细节的更多信息。
答案 2 :(得分:0)
请注意Interface Comparable<T>
是一个通用接口。这里T
是类型(Class,Interface)。您想要将Student
与其他类型(Student
)进行比较。
所以你必须将类型(T
)Student
传递给Comparable<T>
。
因此您将其更改为
public class Student implements Comparable<Student>
另一点必须将Comparable<T>
接口实现为相同的方法签名,并将类型更改为Student
类。
public int compareTo(Student anotherStudent)
你写过
public static void compareTo()
不遵循Comparable<T>
类中的界面Student
方法签名和返回类型。
在这里,您应该实现特定于域的逻辑。我不知道你想怎么实现它?您可以按字母顺序或根据其CGPA比较名称。