线程中的异常;“主要”;java.lang.IndexOutOfBoundsException:索引:1703,大小:1699位于java.util.ArrayList.rangeCheck(ArrayList.java:604) //数组列表问题 公共静态void main(字符串[]args){ 双Vn=0; 双θ=0; List ints=new ArrayList(); 对于(int c=0;c=0&&x

线程中的异常;“主要”;java.lang.IndexOutOfBoundsException:索引:1703,大小:1699位于java.util.ArrayList.rangeCheck(ArrayList.java:604) //数组列表问题 公共静态void main(字符串[]args){ 双Vn=0; 双θ=0; List ints=new ArrayList(); 对于(int c=0;c=0&&x,java,arraylist,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++){

包含
查找值,同时删除索引处的元素

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

//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)
将为真,但是
删除(2)
会给您一个异常


另外,
remove
确实具有删除对象第一次出现的属性。

对于
int
包含查找值,同时在索引处删除元素

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

//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)
将为真,但是
删除(2)
会给您一个异常

另外,
remove
确实具有删除对象第一次出现的属性。

您正在调用,而不是。请重试

你在打电话,不是。试试看


+1是的,remove()对于自动装箱类型来说是令人困惑的。像这样的东西有没有成为Java拼图呢?问题并不是这样。他已经在检查索引范围之间的
x
。唯一的问题是他在测试错误的范围。@RohitJain:但他也检查
contains()
@jlordo。是的,这是OP需要解决的一些逻辑问题。这与当前问题无关。@RohitJain可能是,但您的“修复”会破坏代码,而jlordo的则不会。+1是,删除()对于自动装箱类型来说是令人困惑的。像这样的东西曾经成为Java拼图吗?问题并不是这样。他已经在检查索引范围之间的
x
。唯一的问题是他测试的范围是错误的。@RohitJain:但他也检查
contains()
@jlordo。是的,OP需要解决一些逻辑问题。这与当前问题无关。@RohitJain可能是,但你“修复”破坏了代码,而jlordo的则没有。好吧,这也将解决当前的问题。可能这是更好的方法。删除我的答案。我的意思是删除x,x是我要从数组中删除的数字,以便下次我生成一个随机数时,该随机数应包含在数组中(x已被排除)。我不确定是否应该同时删除值和索引。@sophiaxiong:在您的代码中,您应该删除
ints.remove(x);
并将其替换为我答案中的代码。好吧,这也将解决当前的问题。也许这是更好的方法。删除我的答案。我的意思是删除x,x是我要从数组中删除的数字,以便下次生成应包含在数组中的随机数(x已被排除)。我不确定是否应该同时删除值和索引。@sophiaxiong:在您的代码中,您应该删除
ints.remove(x);
,并将其替换为我答案中的代码。您能试着解释一下问题是什么吗?您能试着解释一下问题是什么吗?
ints.remove(Integer.valueOf(x));