4

我正在为初学者 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)

这是类 Warehouse 中的方法本身:

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。

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

4

2 回答 2

6

您不能遍历要添加内容的同一个列表。单独列出要添加的内容,然后将它们全部添加到最后。

于 2011-12-18T18:18:10.597 回答
4

mCatalog迭代时不得修改。你在这个循环中添加了一个元素:

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

请参阅AbstractList中的ConcurrentModificationExceptionmodCount

于 2011-12-18T18:18:10.627 回答