线程“main”中的异常java.lang.IndexOutOfBoundsException:索引:1703,大小:1699 at java.util.ArrayList.rangeCheck(ArrayList.java:604)

时间:2013-06-26 21:13:13

标签: java arraylist

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

         }
      }
   }  
}

2 个答案:

答案 0 :(得分:3)

对于intcontains会查找该值,而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));