0

linked listこのメソッドは、a の項目が特定の要素 (私の場合は elem) と等しいたびにカウンターに追加するように設計されています。

私は持っている;

public int count(E elem) {
    Node <E> current = new Node <E>();
    current = head;
    int counter = 0;

    if (current == null) {
        return 0; //current is null
    }

    for (int i = 0; i<size; i++){
            if (elem == current){
                counter++;
                head = current.getNext();
            }
    }
    return counter;
    }



public static void main(String[] args) {

    SLinkedListExtended<String> x = new SLinkedListExtended<String>();

    x.insertAtTail("abc");
    x.insertAtTail("def");
    x.insertAtTail("def");
    x.insertAtTail("xyz");
    System.out.println(x.count("def")); // should print "2"
    x.insertAtTail(null);
    x.insertAtTail("def");
    x.insertAtTail(null);
    System.out.println(x.count("def")); // should print "3"
    System.out.println(x.count(null)); // should print "2"
}
}

しかし、実行すると、毎回 0 が返されます。私は自分のループを調べましたが、どこが間違っているのかわかりません

4

2 に答える 2

3

for ループでは、 aNode<E>と anを比較していEます。彼らは決して平等ではありません。

于 2013-02-24T04:43:08.537 に答える
2

3 つの問題:

  1. elem == currentelem は E 型で、current は Node 型です。それらは等しくありません。おそらく、次のようなものが必要ですcurrent.getElement()
  2. .equals()その比較には、たとえば を使用する必要がありますelem.equals(current.getElement())。これがなくても、テストはうまくいく可能性が高いことに注意してください。ただし、文字列をチェックしていて、それらが特殊なケースであるという理由だけです (文字列のインターンを調べてください)。
  3. あなたのループはリストを移動していません。あなたはhead = current.getNext();あなたが欲しいcurrent = current.getNext()
于 2013-02-24T04:48:36.510 に答える