【发布时间】:2015-05-26 03:07:07
【问题描述】:
我正在尝试在我创建的 LinkedList 类上创建自定义迭代器。我被要求更改 add 函数,以便它按从小到大的顺序添加对象 Term。 (Term 是一个简单的类,形式为 Term(int power))
我无法弄清楚如何在 addTerm() 中创建一个循环,以便继续搜索下一个元素以查看它是否大于 Term 中的当前幂。有人可以帮忙吗?
import java.util.Iterator;
public class customImpl implements custom{
private static class Node {
Term data;
Node next;
}
private Node head;
private class TermIterator implements Iterator<Term> {
private Node current;
private TermIterator(Node start) {
current = start;
}
@Override
public boolean hasNext() {
return current != null;
}
@Override
public Term next() {
Term result = current.data;
current = current.next;
return result;
}
@Override
public void remove() {
throw new UnsupportedOperationException("Not supported");
}
}
/**
* Add a term to the expression
*
* @param term the term to be added.
*/
@Override
public void addTerm(Term term) {
TermIterator iterator = new TermIterator(head);
Node newNode = new Node();
while(iterator.hasNext()) {
if(term.getPower() > iterator.next().getPower()) {
newNode.next = head;
}
else newNode.data = term;
}
newNode.data = term;
newNode.next = head;
head = newNode;
}
/**
* Returns an iterator over elements of type {@code T}.
*
* @return an Iterator.
*/
@Override
public Iterator<Term> iterator() {
return new TermIterator(head);
}
}
【问题讨论】:
-
addTerm已经有一个循环,它完全符合您的要求。我认为您的问题存在于迭代器实现中。 -
您可能想要添加对代码预期操作的说明。另外:
Iterator.next()应该在结束时提高NoSuchElementException。你的实现得到一个通用的空指针。
标签: java linked-list iterator