I have this method that removes a specific Object P from the ArrayList
here is my code:
public void removeProduct(Product p) throws StockException{
int flag=0;
for(Product i:StockProducts)
if(p.getCode()==i.getCode()){
this.StockProducts.remove(p);
flag=1;
}
if(flag==0){
StockException e = new StockException("could not remove the Product , PRODUCT IS NOT IN THE STOCK: ", p);
throw e;
}
}
Error :
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at Stock.removeProduct(Stock.java:29)
at Test.main(Test.java:18)
If you need further information about my code tell me
ADDING METHOD
public void addProduct(Product p) throws StockException{
for(Product i:StockProducts)
if(p.getCode()==i.getCode()){
StockException e = new StockException("could not add the Product , CODE ALREADY EXIST IN STOCK: ", p);
throw e;
}
this.StockProducts.add(p);
}
You are deleting an object from the ArrayList
while trying to iterate through it. As others have pointed out to you, this doesn't work and is giving you the ConcurrentModificationException
. You want something like this:
if(StockProducts.contains(p))
StockProducts.remove(p);
Alternatively, if you really want to iterate through the list and change it, you should be able to use a ListIterator
like this:
ListIterator<Product> iter = StockProducts.listIterator();
while(iter.hasNext()){
if(iter.next().equals(p)){
iter.remove(p);
}
}
or if the list can have multiple Product
s with the same result from getCode()
:
ListIterator<Product> iter = StockProducts.listIterator();
while(iter.hasNext()){
if(iter.next().getCode() == p.getCode()){
iter.remove(p);
}
}