gpt4 book ai didi

java - 迭代器实现导致无限循环

转载 作者:行者123 更新时间:2023-12-02 18:17:43 25 4
gpt4 key购买 nike

我正在尝试为我构建的链表式类执行以下 foreach 循环:

boolean contains = false;
for(Thing t : front) {
if(t.equals(something)) {
t.doSomething();
contains = true;
break;
}
}

这是我实现的迭代器方法:

@Override
public Iterator<Thing> iterator() {
Thing current = this;
return new Iterator<Thing>() {
public boolean hasNext() {
return current.hasNext();
}

public Thing next() {
return current.next;
}
};
}

我已经尝试对此进行调试,似乎它没有返回链接列表中的下一个元素,因此当我运行它并尝试执行 foreach 循环时会导致无限循环。

很抱歉,如果这个问题已经得到解答或者存在一个非常愚蠢的错误,我搜索了一段时间但找不到答案。这是我第一次编写迭代器,所以请温柔一点。 :)

最佳答案

您必须在 next() 中推进 Iterator 的状态:

    public Thing next() {
current = current.next;
return current;
}

否则,对 next() 的所有调用都将返回相同的元素。

编辑:

您应该将局部变量声明 Thing current = this; 移动到匿名类实例中(即将其转换为实例变量)。

@Override
public Iterator<Thing> iterator() {
return new Iterator<Thing>() {

private Thing current = Thing.this;

public boolean hasNext() {
return current.hasNext();
}

public Thing next() {
current = current.next;
return current;
}

};
}

关于java - 迭代器实现导致无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33627656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com