2011-11-11 44 views
-4

我試圖將列表的子列表追加到另一個列表。它在while循環中拋出Concurrent Modification異常,並在其中調用addAll()以追加perm列表元素。我需要減少perm對象中p列表的大小,然後將其中的一部分添加到outvec中。所以,這一直repeatin guntil彼爾姆對象的一覽P元素的數量< = 1,本是我的代碼是什麼樣子:由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>(); 
} 

的問題是它扔我一個ConcurrentModificationException的在outvec.p。的addAll(溫度);這個說法。這是我得到︰

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

您的代碼不能編譯,錯誤不在代碼的這一部分。

併發異常通常發生在迭代列表或其他結構時,並且在同一列表中同時刪除或添加一些元素。