繁体   English   中英

试图实现可比接口

[英]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( TStudent传递给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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM