2011-11-11 2 views
-4

リストのサブリストを別のリストに追加しようとしています。そのwhileループでは、addAll()を呼び出してパーマネントリスト要素をoutvecに追加するConcurrent Modification例外が発生しました。私はpermオブジェクト内のpリストのサイズを減らし、outvecに特定の割合を追加する必要があります。問題のは私にoutvec.pでConcurrentModificationExceptionを投げているJavaコードによってConcurrentmodificationExceptionがスローされる

import java.util.Collections; 
import java.util.List; 

public class Generate { 

    //function to generate the output vector 
    ListGenerator gen(ListGenerator perm, double frac, int n) { 
     ListGenerator outvec = new ListGenerator(); 
     for(int i = 0; i < n; i++) 
      perm.p.add(i, i+1); 
     outvec.p = perm.p; 
     //System.out.println("p in gen function: " + p); 
     randomPerm(perm); 
     int x = perm.p.size(); 
     while(x > 1) 
     { 
      perm.p = firstFP(frac, perm); 
      System.out.println("perm.p after firstFP call " + perm.p); 
      outvec.p.addAll(perm.p); 
      System.out.println("size of outvec: " + outvec.p.size()); 
      x = perm.p.size(); 
     } 
     return outvec; 
    } 

    //function to generate random permutation of numbers 
    private void randomPerm(ListGenerator perm) { 
     Collections.shuffle(perm.p); 
     //System.out.println("perm in randomPerm function: " + p); 
    } 


    //function to return first f*|p| number of elements from p 
    List<Integer> firstFP(double f, ListGenerator perm) { 
     int new_size = (int) (f * perm.p.size()); 
     return(perm.p.subList(0, new_size)); 
    } 

    public static void main(String args[]) { 
     Generate g = new Generate(); 
     ListGenerator p = new ListGenerator(); 
     ListGenerator outvec = new ListGenerator(); 
     double frac = 0.3; 
     int N = 70000; 
     outvec = g.gen(p, frac, N); 
     System.out.println("outvec: " + outvec.p); 
     System.out.println("size of outvec: " + outvec.p.size()); 
} 
} 

import java.util.ArrayList; 
import java.util.List; 

public class ListGenerator { 
    List<Integer> p = new ArrayList<Integer>(); 
} 

:これはパーマオブジェクトのリストPの要素数guntil repeatin続けるので、< = 1.この私のコードは次のように見えるものです。 addAll(temp);この文。これは私が得るものです:

Exception in thread "main" java.util.ConcurrentModificationException 
    at java.util.ArrayList$SubList.checkForComodification(Unknown Source) 
    at java.util.ArrayList$SubList.size(Unknown Source) 
    at Generate.gen(Generate.java:17) 
    at Generate.main(Generate.java:49) 

すべての指導は高く評価されます。

+1

そのコードはコンパイルされません。それがあなたの本当のコードだと確信していますか? –

+1

'ListGenerator'と' firstFP() 'のコードと' frac'と 'perm'の値を見ることなく、不可能ではないにしても誰でも助けることは非常に難しいでしょう。 –

+0

コードは意味です - 問題を最小限にし、問題を再現するようにしてください。半分の推測ではありません。 –

答えて

2

コードはコンパイルされず、コードのこの部分にエラーはありません。

通常、並行例外は、リストまたは別の構造を反復処理し、同じリスト内で同時にいくつかの要素を削除または追加すると発生します。

関連する問題