java和.length上的数组边界

前端之家收集整理的这篇文章主要介绍了java和.length上的数组边界前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

keys数组定义如下:

    keys = new char[] {resolv,'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я'};

‘resolv’是一个常量char值0x00,但这与此问题无关.

现在,这段代码有时会引发“java.lang.ArrayIndexOutOfBoundsException:length = 34; index = 34”异常:

protected void LoadKeyRects() {
    keyRects = new Rect[keys.length];
    // Solve key
    keyRects[0] = resRect;


    // Rest of keys
    int x,y;
    for (int i=1; i

到目前为止,我还没有能够自己重现错误,但我从第三方设备的BugSense获得了足够的报告来关注它.似乎有时keyRects [i]可能会引用keyRects [keys.length]尽管i

有任何想法吗?

最佳答案
我可以在for循环中看到问题.如果您没有访问字段本身,则使用超出范围的字段来结束迭代,这是完全错误的.如果你这样做,你应该采用不同的方式.两个例子:

protected void LoadKeyRects() {
    keyRects = new Rect[keys.length];
    // Solve key
    keyRects[0] = resRect;


    // Rest of keys
    int x,y;
    for (int i=1; i

这将正常工作,没有任何ArrayIndexOutOfBoundsException肯定.如果您需要访问甚至修改密钥数组,请执行以下操作:

protected void LoadKeyRects() {
    final char[] localKeys = keys;

    keyRects = new Rect[localKeys.length];
    // Solve key
    keyRects[0] = resRect;


    // Rest of keys
    int x,y;
    for (int i=1; i

猜你在找的Android相关文章