본문 바로가기

삽질

Exception in thread "main" java.util.ConcurrentModificationException

Collection의 값을 반복문 내부에서 수정할 때 발생되는 예외이다.

 

Collection의 값을 수정할 때, 삭제하는 경우 그 크기를 줄여야 한다.

하지만, 아래 코드는 삭제가 아닌 추가만 하고 있다.

for(int i=2; i<9; i++){
    Set<Integer> count = totalList.get(i);

    for(int j=1; j<i+1; i++){
        Set<Integer> preSet = totalList.get(j);
        Set<Integer> postSet = totalList.get(i-j);
                    
        for (int pre : preSet) {
            for (int post : postSet) {
                count.add(pre + post);
                count.add(pre - post);
                count.add(pre * post);

                if(pre!=0 && post!=0){
                    count.add(pre/post);
                }
            }
        }

        StringBuilder sb = new StringBuilder();
        for(int k=0; k<i; k++){
            sb.append(N);
        }
        count.add(Integer.parseInt(sb.toString()));
    }
}

 

위 코드를 보면 딱히 문제될게 없어 보인다.

그 이유는, set의 값을 삭제하는게 아닌 단순히 추가만 하기 때문이다.

하지만 자세히 살펴보면 오타가 있다.

for(int i=2; i<9; i++){
    Set<Integer> count = totalList.get(i);

    for(int j=1; j<i+1; i++){
        Set<Integer> preSet = totalList.get(j);
        Set<Integer> postSet = totalList.get(i-j);
        ...
    }
    ...
}

 

두 번째 반복문에서 j를 사용하고 있는데, i++을 하고 있다....

 

그렇다.

Collection를 수정할 때 반복문에 오타가 있는지 없는지 주의깊게 확인하자!