试图实现Comparable接口

时间:2016-11-22 04:11:37

标签: 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 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  

3 个答案:

答案 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)进行比较。

所以你必须将类型(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比较名称。