晚上好,的Java迭代器,相较于循环
我想呼吁的ArrayList内的每个像素的“ricolora法”(修改像素的颜色),第一种方法(具有迭代)不起作用。
它给了我一个例外(java.lang.reflect.InvocationTargetException)。
第二种方法(for循环)工作得很好。你能帮我理解为什么第一种方法不起作用,我认为for循环和迭代器几乎是一回事。
谢谢你的帮助。
public class DisegnoManoLibera {
protected final ArrayList<Pixel> pixel;
final public void ricolora(Color c) {
Iterator<Pixel> it = this.pixel.iterator();
int i=0;
while(it.hasNext()){
Pixel pi =(Pixel) it.next();
Pixel gi = new Pixel(pi.getX(), pi.getY(), c);
pixel.remove(i);
pixel.add(i, gi);
i++;
}
}
final public void ricolora(Color c) {
for(int i=0; i<this.pixel.size();i++){
Pixel pip = pixel.get(i);
Pixel gin = new Pixel(pip.getX(), pip.getY(), c);
pixel.remove(i);
pixel.add(i, gin);
}
}
public class Pixel {
final int x;
final int y;
final Color c;
@redFIVE增强的for循环不允许在迭代期间更新集合,这是OP正在做的事情。 OP正在做错误的方式。 – Andreas
你正在使用它来回避实现中的迭代器。通过创建'int i'变量并通过索引访问列表,你已经打破了'Iterator'的整个想法。另外,如果你想删除一个元素,有一个'Iterator#Remove()'方法。 – Draco18s