2

このコードを取得しましたがincomparable types: java.lang.String and int、このコード行に対して エラーが発生しますif ((this.name.String.compareTo(obj.name == 0)) && (this.age = obj.age))

メソッドは次のとおりです。

public int compareTo(Object o)
{
    int result;
    AnyClass obj = (AnyClass)o;
    if ((this.name.String.compareTo(obj.name == 0)) && (this.age = obj.age))
    {
        result = 0;
    }
   else if (this.name.compareTo(obj.name) > 0)
    {
        result = 1;
    }
    else
    {
        result = -1;
    }
    return result;
}
4

8 に答える 8

6

ブラケットの位置が間違っていると思いますが、

this.name.String.compareTo(obj.name == 0)) 

obj.name == 0 は、おそらく String (name) と int (0) を比較する場所です。obj.name で compareTo を使用してから、それがゼロに等しいかどうかを確認したいと思います。

第二部もそうだと思う

(this.age = obj.age)

= の代わりに == を使用したかったので、使用したかったコードは次のとおりだと思います。

((this.name.compareTo(obj.name)==0) && (this.age == obj.age))
于 2013-01-13T18:35:18.180 に答える
2

文字列を整数と比較することはできません:)

文字列「001」を整数「1」に変換できます。または整数「1」を文字列「1」に。

Integer.parseInt()またはInteger.toString( )を参照してください。

于 2013-01-13T18:33:26.480 に答える
1

この実装には多くの問題があります。これはComparableforクラスの実装であるように見えますAnyClass。これは、署名が間違っていることを意味します。

AnyClassを実装する必要Comparable<AnyClass>があり、コードは次のようになります。

@Override
public int compareTo(AnyClass other)
{
    int ret = name.compareTo(other.name);
    return ret != 0 ? ret : Integer.compare(age, other.age);
}

Guavaを使用する場合:

@Override
public int compareTo(AnyClass other)
{
    return ComparisonChain.start().compare(name, other.name)
       .compare(age, other.age).result();
}
于 2013-01-13T18:46:58.253 に答える
1

コードだと思います

 if ((this.name.String.compareTo(obj.name == 0)) && (this.age = obj.age))

実際にはこのように読むことになっています

 if ((this.name.compareTo(obj.name) == 0) && (this.age == obj.age))

がどこにあるか== 0を変更する(そして2番目=をに変更する==)ことは、このコードに意味があります。

于 2013-01-13T18:37:23.327 に答える
1

compareToオブジェクト参照(あなたの場合は文字列)を引数として受け取ります。しかし、あなたのコードcompareTo(obj.name == 0)は適切ではないブール値を渡します。

于 2013-01-13T18:33:05.573 に答える
0

コードで意図を説明すると簡単です。最初のエラーはの比較のようcompareTo obj.name == 0です。

試す

if ((this.name.String.compareTo(obj.name) == 0) && (this.age == obj.age))

それがあなたが達成したいと思うことです。

于 2013-01-13T18:36:55.210 に答える
0

((this.name.String.compareTo(obj.name == 0)) && (this.age = obj.age))

obj.name は文字列で、0 は int です。それがエラーが発生する場所です

于 2013-01-13T18:33:09.730 に答える
0

obj.nameは文字列であり、それを と比較してい0ます。

于 2013-01-13T18:35:00.190 に答える