for(Duelist element : duelers){
Пока вы находитесь внутри этого блока, вы перебираете список дуэлянтов, что означает, что вы не можете изменить список, не вызывая ConcurrentModificationException
, если вы не используете * 1005 итератора*remove()
метод.
Проблема в том, что у вас нет доступа к итератору.Поэтому вам придется изменить цикл foreach на цикл while с итератором:
Iterator<Duelist> it = duelists.iterator();
while(it.hasNext()){
Duelist element = it.next();
// continue as before
(обновить после комментариев) или лучше:
for(Iterator<X> it=x.iterator();it.hasNext();){
Duelist element = it.next();
//continue as before
и вместо
duelers.remove(element);
запись
// the problem here is: you can only remove the current element,
// so you'll have to re-think some of your code
it.remove();
Или: вы можете создать копию своего списка для повторения.Это пустая трата памяти (и запах кода), но если ваше приложение маленькое, оно не должно иметь большого значения и потребует наименьшего количества переписывания с вашей стороны.
for(Duelist element : new ArrayList<Duelist>(duelers)){
// continue as above