-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)
任何指導將不勝感激。
該代碼不會編譯。你確定這是你真正的代碼嗎? –
沒有看到'ListGenerator'和'firstFP()'的代碼,以及'frac'和'perm'的值,對於任何人來說,如果不是不可能的話,這將是非常困難的。 –
代碼是含義 - 試圖給我們一些最小的和表示問題的,而不是相同的半猜 - 半混亂。 –