[JAVA/예외처리] java.util.ConcurrentModificationException

결과화면

예시

1
2
3
4
5
6
7
for(Truck t:q){//1초 추가
    t.time++;
    answer++;
    if(t.time==bridge_length){//경과시간이 다 채워지면 삭제
        q.poll();
    }
}

코드 설명: for문을 통해 Queue q를 순회한다. if 조건에 맞다면 큐의 값을 삭제한다.

원인

for문과 같은 루프문을 통해 데이터를 접근하는 도중에, 데이터 변경이 일어날 때 발생한다.

해결 방법

Iterator를 사용하여 큐의 원소에 접근, 삭제한다.

1
2
3
4
5
6
7
8
Iterator iter=q.iterator();
while(iter.hasNext()){
    Truck t=(Truck)iter.next();
    t.time++;
    if(t.time==bridge_length){
        iter.remove();
    }
}

iterator()메소드를 이용해 iter를 선언, hasNext()로 현재 iter의 다음 원소가 있는지 파악한 후 있다면 next()로 값을 가져온다. remove()로 원소를 삭제한다.