質問

私は、インサートと、リンクリストを作成し、検索した機能を削除します。また、私はそれのためのイテレータを作成しました。さて、私はこれを行うと仮定します:

myList<Integer> test = new myList();
test.insert(30);
test.insert(20);
test.insert(10);
myList.iterator it = test.search(20);
if(it.hasNext())
    System.out.println(it.next());

出来上がり、それは(この場合20で、ノードの要素の値を出力)動作します。さて、私はこれを行う場合:

myList<Double> test = new myList();
test.insert(30.1);
test.insert(20.1);
test.insert(10.1);
myList.iterator it = test.search(20.1);
if(it.hasNext())
    System.out.println(it.next());
反復子がnullを指しているので、

これは、しません。ここでは検索機能の実装があります:

public iterator search(T data)
{
    no<T> temp = first;
    while( (temp != null) && (temp.data != data) )
        temp = temp.next;
    return (new iterator(temp));
}

ここで私が比較して怪しい何かがあります知っている方法は次のとおりです。私はこのような上記のコードの一部を変更する場合:

while( (temp != null) && (temp.data != data) )
     System.out.println(temp.data + " " + data);
     temp = temp.next;

私は、リスト内の数字を印刷し、それを見ることができます。これは、「20.1 20.1」(例えば)ある時点で、印刷します。だから、どのように私はこの問題を解決することができますか?関数は、右のように見えますが、Javaが正しく数値を比較していないかのように、それはちょうどようです。

EDIT:WTH、BigDecimalのは、あまりにも私の問題の同じ種類を与えた。

EDIT 2:等号()が働いて、他の何かが間違っていた実現しませんでした。申し訳ありません。

役に立ちましたか?

解決

あなたはこのために!=演算子を望んでいません。これは、参照をcomapres。あなたは.equals()方法を望んます:

public iterator search(T data)
{
    no<T> temp = first;
    while (!data.equals(temp.data)) {
        temp = temp.next;
    }
    return (new iterator(temp));
}

また、オートボクシングに気を付けます。あなたはそのtest.search(20.1)ボックスに、おそらくあなたの比較を中断しますFloatないDouble、20.1を見つけることができます。 test.search(20.1d)との結果を比較してください。私が正しくリコール場合、式ます:

new Float(20.1).equals(new Double(20.1))

falseです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top