计数器循环不起作用

时间:2013-02-24 04:36:45

标签: java loops linked-list counter

此方法旨在每次linked list中的项目等于给定元素时添加到计数器,在我的情况下为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。我查看了我的循环,无法弄清楚我哪里出错了

2 个答案:

答案 0 :(得分:3)

在for循环中,您要将Node<E>E进行比较。他们永远不会平等。

答案 1 :(得分:2)

三个问题:

  1. elem == current elem属于E类型,current属于Node类型。他们不平等。你可能想要current.getElement()
  2. 之类的东西
  3. 您应该使用.equals()进行比较,例如elem.equals(current.getElement())。请注意,即使没有这个,你的测试也可能会有效,但这只是因为你正在检查字符串并且它们是一个特例(查找String interning)
  4. 你的循环没有在列表中移动。您想要head = current.getNext();
  5. current = current.getNext()