2014-03-12 1 views
4

아래 코드에서 Iterator를 사용하여 Vector에서 요소를 제거하려고 시도하는 try catch 블록이 있습니다. Vector를 확장하고 Iterator를 구현하는 자체 클래스 인 QueueExtendingVect를 만들었습니다.Iterator.remove() IllegalStateException

유효한 qev1은 QueueExtendingVect 클래스의 인스턴스입니다. 이미이 벡터에 몇 가지 요소를 추가했습니다. 이 코드에서

try { 
    qev1.iterator().remove(); 
}catch(UnsupportedOperationException e){ 
    System.out.println("Calling Iterator.remove() and throwing exception."); 
} 


qev1.enqueue(ci); 
qev2.enqueue(ci); 
qcv1.enqueue(ci); 
qcv2.enqueue(ci); 

for(int i = 1; i < 5; i++){ 
    if(i % 2 == 0){ 
    qev1.enqueue(new CInteger(i+1)); 
    qev2.enqueue(new CInteger(i+1)); 
    qcv1.enqueue(new CInteger(i+1)); 
    qcv2.enqueue(new CInteger(i+1)); 
    } 
    else { 
    qev1.enqueue(new Date(i*i)); 
    qev2.enqueue(new Date(i*i)); 
    qcv1.enqueue(new Date(i*i)); 
    qcv2.enqueue(new Date(i*i)); 
    } 

} 은 내가 벡터 qev1에 몇 가지 요소를 추가 할 수 있습니다. 다른 변수는 코드의 다른 부분에 있습니다. 그러나 프로그램을 실행할 때 런타임에 IllegalStateException이 발생합니다. 나는 이것이 무엇을 의미하는지 모른다.

+0

반복기에 아무 것도 없나요? 더 많은 코드를 입력하십시오. 구체적으로 반복되는 컬렉션은 어떤 유형입니까? –

답변

21

Iteratornext()을 부르지 않았으므로 아직 첫 번째 항목을 언급하지 않았습니다. 아직 지정되지 않은 항목은 제거 할 수 없습니다.

먼저 next()으로 전화를 걸어 첫 번째 항목으로 이동 한 다음 remove()으로 전화하십시오.

+0

"qev1.iterator(). next()"문을 포함하도록 코드를 다시 작성했지만 여전히 동일한 오류가 발생합니다. 이 오류가 발생하는 다른 이유가 있습니까? – Delfino

+2

@mynorka 당신은 그 호출로 새로운 iterator를 만든다. 문제는 의미합니다. 이 대답은 정확합니다. – Obicere

+2

이것은 나에게도 일어났다. 하지만 그 원인은 같지 않았습니다. 나는 it.remove()를 두 번 이상 호출하여 IllegaStateException을 발생시킵니다. –

관련 문제