2

わかりましたので、ユーザーが無限の数を入力できるようにするプログラムを書きたいと思っています。その後、それらは同じ順序で再び印刷されます。

このエラーが発生しています:

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行目はこの「System.out.println(itr.next());」という行です。1

これが私のコードです:

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");
}
}

イテレータを台無しにしましたか? 前もって感謝します!

4

2 に答える 2

4

に何かを追加する前に、イテレータを作成するのが早すぎましたVector。次の行を移動します。

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

最後の while ループで使用する直前まで:

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

...そして、Vector.

が表示された理由は、が存在する間にConcurrentModificationExceptionを変更したためです。VectorIterator

于 2013-06-19T17:53:52.387 に答える
3

JavaDocを参照してください。太字は私のものです:

Vector の iterator および listIterator メソッドによって返される Iterator はフェイルファストです。Iterator の作成後に、Iterator 自体の remove メソッドまたは add メソッド以外の方法で Vector が構造的に変更された場合、Iterator は ConcurrentModificationException をスローします。したがって、同時変更に直面した場合、Iterator は、将来の不確定な時点で恣意的で非決定論的な動作を危険にさらすのではなく、迅速かつ明確に失敗します。Vector の elements メソッドによって返される列挙型は、フェイルファストではありません。

あなたの場合、作成後にベクターを変更したため、投稿で例外が発生しました。

于 2013-06-19T17:54:44.703 に答える