2013-06-19 4 views
2

좋아요. 그래서 사용자가 무한한 양의 숫자를 입력 할 수있는 프로그램을 작성하려고합니다. 그런 다음 동일한 순서로 다시 인쇄됩니다. "에서 System.out.println (itr.next());"벡터의 내용을 인쇄 할 때 ConcurrentModificationException이 발생합니다.

Exception in thread "main" java.util.ConcurrentModificationException 
    at java.util.Vector$Itr.checkForComodification(Unknown Source) 
    at java.util.Vector$Itr.next(Unknown Source) 
    at myPackage.Main.main(Main.java:41) 

41 회 라인이 라인은 다음과 같습니다

는이 오류를 얻고있다

package myPackage; 

import java.util.Scanner; 
import java.util.Vector; 
import java.lang.Integer; 
import java.util.Iterator; 

public class Main { 

private static Scanner user_input; 

public static void main(String[] args) { 

    int first = 42; 
    int second = 84; 

    user_input = new Scanner(System.in); 

    Vector<Integer> v = new Vector<Integer>(); 

    Iterator<Integer> itr = v.iterator(); 

    System.out.println("Please enter the numbers you wish to store temporarily before printing. When finished, enter either 42 or 84"); 

    int userInt = user_input.nextInt(); 

    while(user_input.equals(first) == false && user_input.equals(second) == false){ 

     userInt = user_input.nextInt(); 
     if(userInt == 42 || userInt == 84){ 
      break; 
     } 
     else{ 
      v.add(userInt); 
     } 
    } 

     System.out.println("Iterating through Vector elements..."); 

     while(itr.hasNext()){ 
      System.out.println(itr.next()); 
     } 

    System.out.println("The program has terminated"); 
} 
} 

가 반복자에 나는 엉망나요 : 여기

하나는 내 코드? 미리 감사드립니다!

답변

3

Vector에 아무 것도 추가하기 전에 이터레이터를 너무 일찍 만들었습니다. 이 라인을 이동 :

Iterator<Integer> itr = v.iterator(); 

에 즉시 루프 동안 마지막에 사용하기 전에 : 당신이 Vector 수정을 완료 한

Iterator<Integer> itr = v.iterator(); 
while(itr.hasNext()){ 

... 후에.

ConcurrentModificationException을 본 이유는 Iterator이있는 동안 Vector을 수정했기 때문입니다.

3

JavaDoc을 참조 굵은 내입니다 : 귀하의 경우에는

The Iterators returned by Vector's iterator and listIterator methods are fail-fast: if the Vector is structurally modified at any time after the Iterator is created, in any way except through the Iterator's own remove or add methods, the Iterator will throw a ConcurrentModificationException. Thus, in the face of concurrent modification, the Iterator fails quickly and cleanly, rather than risking arbitrary, non-deterministic behavior at an undetermined time in the future. The Enumerations returned by Vector's elements method are not fail-fast.

, 당신은 당신에게 게시물에 예외를 준 만든 후 벡터를 수정했습니다.