Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这个foreach循环有什么问题。。???安卓_Java_Android - Fatal编程技术网

Java 这个foreach循环有什么问题。。???安卓

Java 这个foreach循环有什么问题。。???安卓,java,android,Java,Android,我有一个foreach循环,循环遍历向量中的每个对象。当我调试代码时,它成功地为向量中的第一个对象运行。但是,当它尝试为第二个对象运行循环时,它将失败。我确信向量中有不止一个元素 for(Object shape : vecForShapes) { currentNode = (Drawable) shape; newNode = getResources().getDrawable(R.drawable.nodered);

我有一个foreach循环,循环遍历向量中的每个对象。当我调试代码时,它成功地为向量中的第一个对象运行。但是,当它尝试为第二个对象运行循环时,它将失败。我确信向量中有不止一个元素

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…谢谢你的提示!!