0
//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;

         }
      }
   }  
}
4

2 回答 2

3

对于intcontains查找值,同时remove删除索引处的元素。

因此,经过多次删除后,接近末尾的数字可能具有较小的索引,例如,

0, 1, 2 -> 0, 2

所以这里contains(2)是真的,但remove(2)给你一个例外。

此外,remove确实有一个变体可以删除对象的第一次出现。

于 2013-06-26T21:14:32.227 回答
1

你在打电话remove(int index),不是remove(Object o)。尝试

ints.remove(Integer.valueOf(x));
于 2013-06-26T21:19:42.607 回答