Java 正在尝试实现该接口

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

只是想知道这个错误意味着什么,我应该如何修复它

错误:类型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  

为了正确实现
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()