此方法旨在每次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。我查看了我的循环,无法弄清楚我哪里出错了
答案 0 :(得分:3)
在for循环中,您要将Node<E>
与E
进行比较。他们永远不会平等。
答案 1 :(得分:2)
三个问题:
elem == current
elem属于E类型,current属于Node类型。他们不平等。你可能想要current.getElement()
。.equals()
进行比较,例如elem.equals(current.getElement())
。请注意,即使没有这个,你的测试也可能会有效,但这只是因为你正在检查字符串并且它们是一个特例(查找String interning)head = current.getNext();
current = current.getNext()
醇>