私はメインメソッド内のforループを入力するコードがあります。私のjava.util.ConcurrentModificationExceptionの原因を見つけることができません
for (List<Point2D> points : output) {
currentPath = pathDistance(points);
if (shortest == 0){
shortest = currentPath;
} else if (currentPath < shortest) {
best = points;
shortest = currentPath;
}
}
pathDistance
が
public static Double pathDistance(List<Point2D> path){
double distance = 0;
int count = path.size()-1;
for (int i = 0; i < count; i++) {
distance = distance + path.get(i).distance(path.get(i+1));
}
distance = distance + path.get(0).distance(path.get(count));
return distance;
}
として定義されて
しかし、私はエラー
を得続けるException in thread "main" java.util.ConcurrentModificationException
at java.util.SubList.checkForComodification(Unknown Source)
at java.util.SubList.size(Unknown Source)
at java.util.Collections$SynchronizedCollection.size(Unknown Source)
at TSMain.pathDistance(TSMain.java:76)
at TSMain.main(TSMain.java:203)
私は、これは、反復が依存しながら、私は、オブジェクトを変更することだということを意味することになっている知っていますそれは起こっているかもしれないが、私の人生は分からない。どんな助けもありがとう。
あなたは 'output'を変更していますが、必ずしもこの' for'ループで変更する必要はありません。これは、別のコードの別のスレッドでも実行できますが、 'output'オブジェクトとまったく同じです。 – Tom
強化されたforループを、各反復でサイズを計算する従来の方法に置き換えてください。リストをまったく変更する(要素を削除するか要素を追加する)場合、拡張forループの問題が発生します。 –
'Collections.synchronizedCollection'でラップされたサブリストを渡しているようです。しかし、元のリストは、反復処理中に変更されています。 – vsminkov