Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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 为什么我的迭代器.next会导致ConcurrentModificationException?_Java_Arraylist_While Loop_Iterator - Fatal编程技术网

Java 为什么我的迭代器.next会导致ConcurrentModificationException?

Java 为什么我的迭代器.next会导致ConcurrentModificationException?,java,arraylist,while-loop,iterator,Java,Arraylist,While Loop,Iterator,我正在做一个游戏,你作为一个玩家吃点。。。这些点随机产生,当玩家覆盖这些点时,它们应该被移除。为此,我使用了迭代器 ArrayList<Dot> dots = new ArrayList<Dot>(); Iterator<Dot> i = dots.iterator(); public Game(){ MouseHandler.mouse = new MouseHandler(); Player.player = new Player(40,

我正在做一个游戏,你作为一个玩家吃点。。。这些点随机产生,当玩家覆盖这些点时,它们应该被移除。为此,我使用了迭代器

ArrayList<Dot> dots = new ArrayList<Dot>();
Iterator<Dot> i = dots.iterator();

public Game(){
    MouseHandler.mouse = new MouseHandler();
    Player.player = new Player(40, 40);

    for(int i = 0; i < 20; i++){
        dots.add(new Dot());
    }
}

public void update(){
    Player.player.update();

    while(i.hasNext()){
        Dot current = i.next();
        if(Player.player.getCircle().intersects(current.getCircle())){
            i.remove();
        }
    }

}
进行此操作时,我在点电流=i.next处获得ConcurrentModificationException

这个问题的原因是什么,为什么会发生

-真诚的亨里克

编辑:很抱歉这么麻烦,我只是想让代码更短、更可读


编辑2:谢谢大家。。。问题是,在创建迭代器之前,我没有向集合添加任何内容。谢谢你的帮助

您得到异常是因为您直接修改集合,而不是通过迭代器


您可以使用i.remove从迭代器中删除。

您正在初始字段分配中创建迭代器,这可能发生在您向构造函数中的集合添加任何内容之前


删除迭代器字段,只需在while循环之前调用dots.iterator,分配给局部变量。

改用I.Remove。因为您在修改列表,而不是迭代器。不,这不是问题所在。。。使用i.remove没有work@Devtons然后,您需要提供更多信息,因为您所做的操作将导致该错误,而通过迭代器删除它则不会。请编写将编译的代码。您的代码在语法上是不正确的,在其他方法的中间有一个Cor,或者缺少一个在代码中进行删除的方法。在iterator-as-a-member-variable方法中,您会发现一个问题:在第二次和后续调用update时,iterator将耗尽,因此调用将是不可操作的。