Java 这个foreach循环有什么问题。。???安卓
我有一个foreach循环,循环遍历向量中的每个对象。当我调试代码时,它成功地为向量中的第一个对象运行。但是,当它尝试为第二个对象运行循环时,它将失败。我确信向量中有不止一个元素Java 这个foreach循环有什么问题。。???安卓,java,android,Java,Android,我有一个foreach循环,循环遍历向量中的每个对象。当我调试代码时,它成功地为向量中的第一个对象运行。但是,当它尝试为第二个对象运行循环时,它将失败。我确信向量中有不止一个元素 for(Object shape : vecForShapes) { currentNode = (Drawable) shape; newNode = getResources().getDrawable(R.drawable.nodered);
for(Object shape : vecForShapes)
{
currentNode = (Drawable) shape;
newNode = getResources().getDrawable(R.drawable.nodered);
newNode.setBounds(currentNode.getBounds());
vecForShapes.remove(currentNode);
vecForShapes.add(newNode);
}
所以基本上我的问题是,为什么这个循环失败了?我真的不明白这里出了什么问题
另外,我的最终目标是从矢量中删除currentNode,用newNode替换它,然后用onDraw方法重新绘制整个矢量
谢谢您不能从/向迭代的集合中删除或添加对象。vecForShapes.removecurrentNode;例如,修改向量形状。因此你得到了你的例外 如果我是你,我会做你想要的修改:
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);
}
这应该做你想要的没有任何错误
附言:你真的是指向量吗?我郑重建议改用ArrayList。它的性能明显更好。在Iterable上使用foreach时,后台会有一个迭代器,在对集合进行迭代时,您不能修改集合,但可以调用Iterator.remove。所以我建议您对迭代器I=v.Iterator使用旧的迭代模型;i、 hasNext。。。。。然后打电话给i.remove 你是什么意思:它失败了?您是否遇到异常?这可能是您的问题:请显示矢量形状的定义。当数据以指数形式增加时,矢量更好,并且是线程安全的。但是,是的,大多数其他情况下,我会经常使用ArrayList tooThanks。你是对的……我不知道我在迭代时无法从集合中删除或添加。。。我现在一定要看看arraylist…谢谢你的提示!!