线程中的异常;“主要”;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));