【问题标题】:I don't know why I'm getting an out of bounds exception?我不知道为什么我会出现越界异常?
【发布时间】:2010-08-05 21:32:54
【问题描述】:

我不知道为什么会生成 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; }

【问题讨论】:

    标签: android arrays


    【解决方案1】:

    连同 Luther Blissett 的回答...

    您是否在实例化数组和开始for 循环之间修改mIPAWidth?我会将您的 for 条件更改为如下内容:

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

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

    【讨论】:

    • 感谢您的意见。我想我可能指的是一个变量,该变量的值可以在运行时更改,从而访问已经预定义的数组中的索引可能会引发异常。我现在就改!
    【解决方案2】:

    px的类型是什么?如果它是双精度数,那么您可能会与&lt;= 进行错误比较(与双精度数进行比较几乎永远不会正确)。尝试使用规范循环 for(px = 0; px &lt; mIPAWidth ; px++) 代替,或者更好的是,将循环索引设为整数。

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

    【讨论】:

    • +1... 这是为你的 for 循环计数器声明一个新变量的另一个好理由。
    • 我在这个循环的初始阶段确实使用了一个单独的“n”变量作为计数器,但我认为问题可能在于 mIPAwidth 也是动态的,因为它的值在表面变化时被重置,这循环是该方法的一部分,configureGeometry ......所以我想如果在数组已经初始化时改变 mIPAWidth,它会产生我在这里遇到的 outofbounds 异常!
    • @GG:这是iandisme 建议的,不是吗?然后您应该检查他的答案(您可以更改接受的答案 IIRC)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多