Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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编程错误:Java.util.ConcurrentModificationException_Java_Exception_Arraylist_Concurrentmodification - Fatal编程技术网

Java编程错误:Java.util.ConcurrentModificationException

Java编程错误:Java.util.ConcurrentModificationException,java,exception,arraylist,concurrentmodification,Java,Exception,Arraylist,Concurrentmodification,我正在为一个Java初学者编写一个程序作为教程的一部分。我有以下方法,每当我运行它时,它都会给我以下异常: java.util.ConcurrentModificationException at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372) at java.util.AbstractList$Itr.next(AbstractList.java:343)

我正在为一个Java初学者编写一个程序作为教程的一部分。我有以下方法,每当我运行它时,它都会给我以下异常:

  java.util.ConcurrentModificationException
        at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
        at java.util.AbstractList$Itr.next(AbstractList.java:343)
        at Warehouse.receive(Warehouse.java:48)
        at MainClass.main(MainClass.java:13)
下面是类仓库中的方法本身:

public void receive(MusicMedia product, int quantity) {

  if ( myCatalog.size() != 0) { // Checks if the catalog is empty

    // if the catalog is NOT empty, it will run through looking to find
    // similar products and add the new product if there are none
    for (MusicMedia m : myCatalog) { 
        if ( !m.getSKU().equals(product.getSKU()) ) {
                myCatalog.add(product);
        }
    }

  } else { // if the catalog is empty, just add the product
        myCatalog.add(product);
  }
}
问题似乎在于if-else语句。如果我不包括If-else,那么程序将运行,尽管它不会正常工作,因为循环不会遍历空的ArrayList


我尝试添加一个产品,只是为了防止它在代码的其他部分为空,但它仍然会给我同样的错误。有什么想法吗?

您不能在要添加内容的列表中重复。将要添加的内容单独列出,然后在末尾添加所有内容。

在迭代过程中,不得修改
mCatalog
。您将在此循环中向其添加一个元素:

for (MusicMedia m : myCatalog) { 
    if ( !m.getSKU().equals(product.getSKU()) ) {
            myCatalog.add(product);
    }
}

请参见和。

因此,迭代和添加不同时进行并不重要?(由if-else分隔)在对集合进行迭代时,不能修改集合。这就是Java中出现任何
ConcurrentModificationException
的原因。@user1104775这无关紧要。您无法在迭代循环中修改集合。我似乎过于关注第二次添加,而忘记了循环中的第一次添加。谢谢@user1104775不同时迭代和添加是什么意思?在for(…){和closing}之间发生的一切都在作用域中使用MusicMedia m:myCatalog创建了开放迭代器。它是if(!m.getSku()…)中的myCatalog.add(…),这是一个并发修改。-啊,你自己也注意到了:)非常感谢,盯着代码看太久似乎让我忘记了那部分。