Java 正在尝试实现该接口
只是想知道这个错误意味着什么,我应该如何修复它 错误:类型Student必须实现继承的抽象方法java.lang.Comparable.compareTo(java.lang.Object) 我正在尝试实现它,以便可以使用该类的compareTo方法 非常感谢你的帮助Java 正在尝试实现该接口,java,comparable,Java,Comparable,只是想知道这个错误意味着什么,我应该如何修复它 错误:类型Student必须实现继承的抽象方法java.lang.Comparable.compareTo(java.lang.Object) 我正在尝试实现它,以便可以使用该类的compareTo方法 非常感谢你的帮助 import java.util.*; import java.io.*; public class Student implements Comparable { private String name; private
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
为了正确实现
Comparable
接口,您必须对代码进行以下更改
(1) 指定类可与之比较的对象类型:
public class Student implements Comparable<Student>
当然,您还必须实现compareTo
方法的主体
- 如果
实例比参数this
小,则other
应返回一个负数compareTo
- 如果
实例比参数this
大,则other
应返回一个正数compareTo
- 如果
实例被认为与参数此
具有“相同的值”,则其他
应返回compareTo
0
有关实现细节的更多信息,请参阅。您所要做的就是实现comparable接口并重写要排序的类中的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
公共班级学生实施可比
{
私有字符串名称;
私人双gpa;
公立学生()
{
name=“”;
gpa=0.0;
}//结束默认构造函数
公立学生(字符串n,双g)
{
name=n;
gpa=g;
}//结束两个参数构造函数
公共双getGPA()
{
返回gpa;
}
公共字符串getName()
{
返回名称;
}
公共无效设置GPA(双g)
{
这是g.gpa=g;
}
公共void集合名(字符串n)
{
this.name=n;
}
公共字符串toString()
{
返回“名称:”+Name+“GPA:”+GPA;
}
公共整数比较(学生)
{
//如果对象根据名称进行排序
返回此.getName().compareTo(student.getName())
//如果对象根据gpa进行排序
返回Double.valueOf(this.gpa).compareTo(Double.valueOf(student.getGPA());
}
}//末级
因为您使用的是原语数据类型double而不是objectdouble,所以我们需要使用double.valueOf(this.gpa)获取对象
根据您的要求,您应该只使用一个返回语句。请注意,
接口Comparable
是一个通用接口。这里T
是类型(主要是类、接口)。您想将Student
与其他类型(Student
)进行比较
因此,您必须将type(T
)Student
传递到Comparable
因此,您将其更改为
public class Student implements Comparable<Student>
你已经写信了
public static void compareTo()
不遵循学生
类中的接口可比
方法签名和返回类型
在这里,您应该实现特定于域的逻辑。我不知道你想怎么实现它?您可以按字母顺序或根据其CGPA对名称进行比较。您的代码不会编译,
compareTo
不应该是static
方法,您不能在static
方法中引用this
您的代码不会编译,compareTo
应该具有public
可访问性,重写方法时不能分配较弱的访问权限
public int compareTo(Student anotherStudent)
public static void compareTo()