我不知道我为什么会遇到越界异常?
我不知道为什么这会产生一个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
数组的实际长度。它可能无法解决你的错误,但它仍然是一个好主意。
px是什么类型?如果它是双倍的,那么你可能会遭受与<=
的错误比较(与double相比几乎是不正确的)。改为使用规范循环for(px = 0; px < mIPAWidth ; px++)
,或者更好,使循环索引为整数。
另外,mIPAWidth
(出于同样的原因)的类型是什么?
+1 ...这是另一个很好的理由为你的for循环计数器声明一个新的变量。 – iandisme 2010-08-05 21:42:58
我在这个循环的初始阶段使用了一个单独的'n'变量作为计数器,但我认为这个问题可能存在于mIPAwidth中也是动态的,因为它的值会在表面变化时重置,并且此循环是该方法的一部分, configureGeometry ...所以我想如果在数组已经被初始化的时候mIPAWidth被改变了,它会产生我在这里遇到的outofbounds异常! – ComethTheNerd 2010-08-05 22:02:52
@GG:这是iandisme提出的,不是吗?你应该检查他的答案,然后(你可以改变接受的答案IIRC)。 – 2010-08-05 22:11:24
感谢您的输入。我想我可能指的是一个变量,它的值可以在运行时改变,使得访问已经预定义的数组中的索引可能会引发异常。我现在就改变它! – ComethTheNerd 2010-08-05 22:03:55