2

文字リストにある数字を表示してから、その数字を削除したかったのです。これが私のコードです:

ミトライアルをパッケージ化します。

import java.util.ArrayList;
import java.util.ListIterator;

public class MyTrials {
    public static void main(String[] args) {
    ArrayList<Character> list = new ArrayList<Character>();
    list.add('a');
    list.add('1');
    list.add('5');
    System.out.println(list.size());
    for( ListIterator i = list.listIterator(list.size());  i.hasPrevious();){
        Character c = (Character) i.previous();
        if( Character.isDigit(c)){
            System.out.println(c + " is a digit");
            list.remove(c);
        }
    }
    System.out.println(list.size());
}
}

エラーメッセージは次のとおりです。

3
5 is a digit
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$ListItr.previous(AbstractList.java:386)
at mytrials.MyTrials.main(MyTrials.java:27)
Java Result: 1

このエラーの原因と修正方法を教えてください。

4

4 に答える 4

0

エラーの原因は、反復子のリストが を使用して変更されたことlist.remove(c);です。リストを直接変更すると、反復子が無効になり、エラーが発生します。

Achintya Jha が投稿したように、イテレータの remove 関数を使用する必要があります

于 2013-04-26T13:20:08.517 に答える
0

list-iterator はフェイルファスト イテレーターであり、別のスレッドが反復している間にスレッドがリストの内容を変更しようとすると、例外がスローされます。

これは役立つかもしれませ

于 2013-04-26T13:21:35.333 に答える