[英]Trying to implement the interface Comparable
只是想知道这个错误是什么意思,以及我该如何解决。
错误:学生类型必须实现继承的抽象方法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
您要做的就是实现可比较的接口,并在要排序的类中重写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语句。
为了正确实现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
。 您可以参考官方Java文档以获取有关实现细节的更多信息。
请注意, Interface Comparable<T>
是通用接口。 这里T
是类型(主要是类,接口)。 您想将Student
与其他类型( Student
)进行比较。
因此,您必须将type( 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进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.