2016-03-11 45 views
0

我想更多的元素添加到ArrayList,但是我收到這些錯誤:不能添加更多的元素到ArrayList

java.util.ConcurrentModificationException 
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) 
    at java.util.ArrayList$Itr.next(ArrayList.java:851) 
    at Gestor.adicionarProduto(Gestor.java:32) 

,我做的第一件事是檢查是否Arraylist是可以添加第一個元素的。我正在檢查ArrayList是否爲空來比較並添加更多元素。

if(!arProduct.isEmpty()){ 
     for(Produto produto : arProduct){ 
      String receivePosicao = letraPrateleira.toLowerCase() + nrPosicao; 
      String searchPosicao = produto.getLetraPrateleira() + produto.getNrPosicao(); 

      if(receivePosicao.equals(searchPosicao)){ 
       System.out.println("Esta posição encontra-se ocupada por outro produto."); 
      }else{ 
       arProduct.add(new Produto(nomeProduto, precoProduto, mensagemAdicional, letraPrateleira, nrPosicao)); 
      } 

     } 

    } 

    if(arProduct.isEmpty(){ 
     arProduto.add(new Produto("a", 2, "a", "a", 1)); 
    } 

我在做什麼錯?

謝謝。

+2

在遍歷它時不要修改列表。 – Marvin

+0

所以,我不應該使用第二條if語句正確嗎? –

回答

0

您在迭代列表時添加元素!

添加您的元素的臨時列表和迭代後添加他們:

List<Produto> toAdd = new ArrayList<>(); 
for(Produto produto : arProduct) { 
    // ... 
    toAdd.add(new Produto(nomeProduto, precoProduto, mensagemAdicional, letraPrateleira, nrPosicao)); 
} 
produto.addAll(toAdd); 
+0

哦,我再也不會犯這個錯誤了,謝謝,代碼現在正在工作。 –

+0

如果使用ListIterator進行迭代,則可以在迭代時添加到ArrayList。 'for'語法只會得到一個'Iterator',但是這不允許你在迭代時添加。 – beresfordt

0

在遍歷它不能修改的列表。 如果列表需要修改,使您的方法返回布爾值,然後修改外部列表。

else語句和第二個if會返回true,這應該會導致列表被修改。

+0

迭代時可以修改:ListIterator listIterator = arrayList.listIterator(); while(listIterator.hasNext()){ listIterator.next();如果(/ *某些條件* /){listIterator.add(「some string」); } } – beresfordt

+0

只需在這裏引用List接口。但我同意,列表員更好 –