我不知道我为什么会遇到越界异常?

我不知道我为什么会遇到越界异常?

问题描述:

我不知道为什么这会产生一个ArrayOutOfBoundsException!我很可能忽略了一些东西,因为我很累,但如果有人能告诉我什么是错的,我会很感激。谢谢。我不知道我为什么会遇到越界异常?

// array declaration 
public int CircleLeft[] = new int[mIPAWidth]; 

// this is my loop that generates the error: 
for(px = 0; px <= mIPAWidth - 1; px++){ 
py =(int) m.sqrt(r^2 - (px-mIPAWidthHalf)^2) + mIPAHeightHalf; 
Log.w(getClass().getName(), "mIPAWidth = " + mIPAWidth + ", index is: " + px); 
CircleLeft[px] = py; } 

随着卢瑟·布利塞特的答案...

你修改之间mIPAWidth当数组被实例化,当你开始for循环?我会改变你的for有条件要上这样的事情:

for(int px = 0; px < CircleLeft.length; px++) 

你知道px类型这样,你知道你在引用CircleLeft数组的实际长度。它可能无法解决你的错误,但它仍然是一个好主意。

+0

感谢您的输入。我想我可能指的是一个变量,它的值可以在运行时改变,使得访问已经预定义的数组中的索引可能会引发异常。我现在就改变它! – ComethTheNerd 2010-08-05 22:03:55

px是什么类型?如果它是双倍的,那么你可能会遭受与<=的错误比较(与double相比几乎是不正确的)。改为使用规范循环for(px = 0; px < mIPAWidth ; px++),或者更好,使循环索引为整数。

另外,mIPAWidth(出于同样的原因)的类型是什么?

+0

+1 ...这是另一个很好的理由为你的for循环计数器声明一个新的变量。 – iandisme 2010-08-05 21:42:58

+0

我在这个循环的初始阶段使用了一个单独的'n'变量作为计数器,但我认为这个问题可能存在于mIPAwidth中也是动态的,因为它的值会在表面变化时重置,并且此循环是该方法的一部分, configureGeometry ...所以我想如果在数组已经被初始化的时候mIPAWidth被改变了,它会产生我在这里遇到的outofbounds异常! – ComethTheNerd 2010-08-05 22:02:52

+0

@GG:这是iandisme提出的,不是吗?你应该检查他的答案,然后(你可以改变接受的答案IIRC)。 – 2010-08-05 22:11:24