java.lang.iterable_java - 迭代java.lang.Iterable的数组或实例 - 缺少常识解决方案? - 堆栈内存溢出...

我试图使用双链表(称为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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值