我试图使用双链表(称为LinkedTree)实现树结构。 话虽如此,当我使用for-each循环时,我最终得到了相同的重复错误:只能迭代数组或java.lang.Iterable的实例。 我在网上查了一些类似的问题,但我似乎无法找到问题所在。 我知道为了迭代器,你必须有可迭代的实例,但是不能和children()这两个实例都是可迭代的吗? 我已经包含了错误的两种方法,我的子方法,以及我自己的iterable和iterator实现。 在此先感谢您的帮助。
public Iterator iterator() {
Iterable> positions = positions();
PositionalList elements = new NodePositionalList();
for (Position p: positions) // ERROR @ positions
elements.addLast(p.element());
return elements.iterator();
}
private void preOrderPositions(Position v, PositionalList> pos)
throws InvalidPositionException {
pos.addLast(v);
for (Position w : children(v)) //ERROR @ children (v)
preOrderPositions(w, pos);
}
儿童方法
public Iterable> children(Position v)
throws InvalidPositionException {
TreePosition p = checkPosition(v);
if (isExternal(v))
throw new InvalidPositionException("");
return p.getChildren();
迭代器
public interface Iterator {
public boolean hasNext();
public E next();
public void remove();
}
可迭代
public interface Iterable {
public Iterator iterator();
public Iterable> positions();
}
ElementIterator(我的迭代器实现)
public class ElementIterator implements Iterator {
private PositionalList list;
private Position cursor;
public ElementIterator (PositionalList L){
list = L;
cursor = (list.isEmpty())? null: list.first();
}
public boolean hasNext() {
return (cursor != null);
}
public E next(){
E toReturn = cursor.element();
cursor = (cursor == list.last())? null: list.next(cursor);
return toReturn;
}
public void remove(){
throw new UnsupportedOperationException();
}
}
编辑:我将for-each循环转换为while循环,如下所示....
protected void preOrderPositions(Position v,
PositionalList> pos) throws InvalidPositionException {
pos.addLast(v);
Iterator> iter = children(v).iterator();
while (iter.hasNext()) {
Position w = iter.next();
preOrderPositions(w, pos);
}
}