2017-11-11 4 views
0

を比較だから私は、ジェネリックを使用して複素数のモジュールを検索し、二つのモジュールを比較することができます簡単なプログラムやろうとしている一方で:それは私に2つのリアルタイム・エラーの1を与えるしかしエラー二つの方法

public class ComplexNumber <T extends Number,U extends Number> 
    implements Comparable<ComplexNumber<T, U>> 
{ 
    private T real; 
    private U imaginary; 

    public ComplexNumber(T real, U imaginary) 
    { 
     this.real=real; 
     this.imaginary=imaginary; 
    } 

    public T getReal() 
    { 
     return real; 
    } 

    public int compareTo(ComplexNumber<?, ?> o) 
    { 
     return this.modul().compareTo(o.modul()); 
    } 

    public U getImaginary() 
    { 
     return imaginary; 
    } 

    public double modul() 
    { 
     double c=Math.sqrt(real.doubleValue()*real.doubleValue()+imaginary.doubleValue()*imaginary.doubleValue()); 
     return c; 
    } 

    public String toString() 
    { 
     return String.format("%.2f+%.2fi", real.doubleValue(), imaginary.doubleValue()); 
    } 
} 

を.compareTo関数で "プリミティブ型doubleでcompareTo(double)を呼び出すことはできません"

とクラスの先頭に1つ: "この行の複数のマーカー - タイプComplexNumberは継承した抽象メソッドを実装する必要があります 比較可能> .compareTo(複合番号) - typあなたは間違いなく、ワイルドカードを使用する必要があるならば、あなたが必要と

@Override 
public int compareTo(ComplexNumber<T, U> o) { 
     // logic 
} 

編集

:E複素数は、あなたがの線に沿って何かを探している」

答えて

1

を継承した抽象メソッドを実装する必要があります。クラス宣言を次のように変更する:を残すことができます。compareToメソッドの署名はそのままです。

最初に受け取ったエラーに関するメッセージは、compareToメソッドをプリミティブタイプdoubleで呼び出しようとしていて、まったく動作しないためです。問題を解決するには、Double.compareを使用し、適切なデータを渡したいと考えています。

@Override 
public int compareTo(ComplexNumber<?, ?> o) { 
     return Double.compare(modul(), o.modul()); 
} 
+0

これはできません。このメソッドではワイルドカードを使用する必要があります。 –

+0

誰が言った..? –

+0

私の願いでは、ワイルドカードを使う必要があると言います。 –