这个foreach循环有什么问题.. ??? Android的

时间:2012-03-11 20:23:09

标签: java android

我有一个foreach循环遍历向量中的每个对象。当我调试代码时,它成功运行向量中的第一个对象。但是当它试图为第二个对象运行循环时它会失败。我确定向量中有多个元素。

for(Object shape : vecForShapes)
        {
            currentNode = (Drawable) shape;
             newNode = getResources().getDrawable(R.drawable.nodered);
             newNode.setBounds(currentNode.getBounds());
             vecForShapes.remove(currentNode);
              vecForShapes.add(newNode);
        }   

基本上我的问题是,为什么这个循环失败了?我真的不明白这里有什么问题。

P.S。我的最终目标是从向量中移除currentNode,将其替换为newNode,然后在我的onDraw方法中重绘整个向量。

由于

2 个答案:

答案 0 :(得分:8)

您无法从迭代中删除或添加对象。 vecForShapes.remove(currentNode);例如修改vecForShapes。因此,你得到了例外。

如果我是你,我会做你想要的修改:

for (int i = 0; i < vecForShapes.size(); i++) {
     currentNode = (Drawable) shape;
     newNode = getResources().getDrawable(R.drawable.nodered);
     newNode.setBounds(currentNode.getBounds());
     vecForSahpes.set(i, newNode);
}

这应该可以做你想要的而没有任何错误。

PS:你的意思是Vector吗?我认真推荐使用ArrayList。它的性能明显更好。

答案 1 :(得分:1)

foreach上使用Iterable时,幕后会有Iterator,在迭代时无法修改集合,但可以调用“iterator.remove” ()”。因此,我建议您使用旧的迭代模型for (Iterator i = v.iterator(); i.hasNext(); .....并在其上调用i.remove()