我有一个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
方法中重绘整个向量。
由于
答案 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()
。