//arraylist problem
public static void main(String[] args) {
double Vn=0;
double thetap=0;
List<Integer> ints = new ArrayList<Integer>();
for(int c = 0; c < 2000; c++){
ints.add(c);
}
while(ints.size()!=0) {
int x=rnd.nextInt();
if(x>=0&&x<2000) {
if(ints.contains(x)){
double r=10;
double Vc= r * r / 3.0D;//area
Vn+=Vc; //sum
ints.remove(x);// that's the problem
thetap=Vn/V;
}
}
}
}
答案 0 :(得分:3)
对于int
,contains
会查找该值,而remove
会删除索引处的元素。
因此,经过多次删除后,接近末尾的数字可能会有一个较小的索引,例如,
0, 1, 2 -> 0, 2
所以这里contains(2)
会成立,但remove(2)
会给你一个例外。
此外,remove
确实有一个variant,可以删除第一次出现的对象。
答案 1 :(得分:1)
您正在呼叫remove(int index)
,而不是remove(Object o)
。尝试
ints.remove(Integer.valueOf(x));