2016-11-22 7 views
0

このエラーが何を意味するのか、どうすればこの問題を解決するのか不思議です。インターフェイスを実装しようとしています。比較可能

エラー:型学生が継承された抽象メソッド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 

答えて

0

あなたは正しくComparableインタフェースを実装するために、あなたのコードに次の変更を行う必要があります。

(1)クラスがに匹敵するオブジェクトのタイプを指定:

public class Student implements Comparable<Student> 

(2)compareTo方法の対応する署名は以下の通りである:

public int compareTo(Student other) 

もちろんのcompareToメソッドの本体も実装する必要があります。

  • thisインスタンスが引数otherより「小さい」の場合、compareTo数を返す必要があります。
  • インスタンスが引数otherより大きい場合、compareToの正のを返します。
  • otherのようにthisインスタンスが「同じ値」と見なされた場合、compareTo0を返します。

実装の詳細については、official java documentを参照してください。

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.valueOf(this.gpa)を使用してオブジェクトを取得する必要があり、二重の代わりにオブジェクトのタイプあなたの要件に応じてreturn文。

+2

は、 'compareTo'は' static'方法であってはならないと、あなたは 'あなたのコードがコンパイルされません – chiwangc

0

Interface Comparable<T>は汎用インターフェイスです。ここではTがタイプ(Class、Interface)です。 Studentと別のタイプ(Student)を比較したいとします。

したがって、タイプ(TStudentComparable<T>を渡す必要があります。

は、したがって、あなたがに有するもう一つのポイントは、同じメソッドシグネチャとしてComparable<T>インタフェースを実装し、Studentクラスタイプを返す

public class Student implements Comparable<Student> 

に変更します。

public int compareTo(Student anotherStudent) 

あなたはStudentクラスにインターフェースComparable<T>メソッドのシグネチャと戻り値の型に従わない

public static void compareTo() 

を書かれています。

ドメイン固有のロジックを実装する必要があります。どのように実装したいのか分かりません。アルファベット順に名前を比較したり、CGPAに基づいたりすることができます。 、

あなたのコードがコンパイルされません
+0

' static'方法でthis'は、 'compareTo'が持つべき' public'のアクセシビリティを参照することはできませんメソッドをオーバーライドするときに弱いアクセス権を割り当てることはできません – chiwangc

+0

@chiwangc tnx :) –

関連する問題