25

これを使用して emp id で並べ替えることができますが、文字列を比較できるかどうかはわかりません。文字列に対して演算子が定義されていないというエラーが表示されます。

public int compareTo(Emp i) {
            if (this.getName() == ((Emp ) i).getName())
                return 0;
            else if ((this.getName()) > ((Emp ) i).getName())
                return 1;
            else
                return -1;
4

5 に答える 5

50

使用する必要があるのは、compareTo()Strings のメソッドです。

return this.getName().compareTo(i.getName());

それはあなたが望むことをするはずです。

通常、インターフェイスを実装するときは、クラスComparableの他のメンバーを使用した結果を組み合わせるだけです。Comparable

以下は、compareTo()メソッドの非常に典型的な実装です。

class Car implements Comparable<Car> {
    int year;
    String make, model;
    public int compareTo(Car other) {
        if (!this.make.equalsIgnoreCase(other.make))
            return this.make.compareTo(other.make);
        if (!this.model.equalsIgnoreCase(other.model))
            return this.model.compareTo(other.model);
        return this.year - other.year;
    }
}
于 2010-09-20T05:02:39.367 に答える
10

コードは次のように記述できることを確認してください。

public int compareTo(Emp other)
{
    return this.getName().compareTo(other.getName());
}
于 2010-09-20T05:06:12.887 に答える
6

Java Stringはすでに Comparable を実装しています。したがって、単にメソッドを次のように書くことができます

public int compareTo(Emp emp) {
   return this.getName().compareTo(emp.getName());
}

(もちろん、null チェックなどの適切な検証を必ず追加してください)

また、コード内で「==」を使用して文字列を比較しようとしないでください。代わりに「equals」メソッドを使用してください。「==」は文字列参照のみを比較し、equals は意味的に 2 つの文字列を比較します。

于 2010-09-20T05:05:14.150 に答える
3

i を Emp にキャストする必要はありません。すでに Emp になっています。

public int compareTo(Emp i) {
    return getName().compareTo(i.getName());
}
于 2010-09-20T05:05:07.603 に答える
1

すべきではない

if (this.getName() == ((Emp ) i).getName())

なれ

if (this.getName().equals(i.getName()))

于 2010-09-20T05:04:12.160 に答える