ArrayIndexOutOfBounds某些输入值的异常

时间:2013-11-20 04:05:14

标签: java arrays indexoutofboundsexception

以下是我的代码的一部分。 对于band和bandRows的某些值,代码似乎运行得很好。但对某些人来说,它会产生一个ArrayIndexOutOfBounds异常。 我可能出错的任何想法?我在代码中找不到任何错误。 提前致谢

for(int i=0; i<bands; i++)
        {
            int a=0;
            while(a<bucketSize) 
            { 
                bandBuckets[i][a] = new ArrayList();
                a++;
            }
        }  

    for (int i = 0; i < bands; i++) 
            {          
                for (int j = 0; j < preprocessedList.size(); j++) 
                {
                    int[][] forBuckets = new int[bands][bandRows];

                    for (int k = 0; k < bandRows; k++) 
                    {
                        Arrays.fill(forBuckets[i], Bands[i][k][j]);

                    }

                    bandBuckets[i][h.hashBands(forBuckets[i], bucketSize)].add(j);

                }
            }   

这是h.hashBands()函数,它位于另一个类

 public int hashBands(int[] in, int bucketSize) 
        {

            int hashVal = 0;
            int k = in.length;
            int base = 3;
            for (int i = 0; i < in.length; i++) {
               // for (int j = 0; i < in[i].length; i++) 
                    hashVal += in[i] * Math.pow(base, k - i - 1);
            }
            return hashVal % bucketSize;

        }

2 个答案:

答案 0 :(得分:1)

也许你的hashBands()函数有溢出。

int的最大值是2 31 - 1.当k-i-1大于19时,hashVal将溢出。在Java中,溢出和下溢不会抛出异常。考虑使用BigInteger及其modPow()函数。

答案 1 :(得分:0)

你能告诉你究竟在哪里获得ArrayIndexOutOfBoundException吗? 看到你的代码似乎从hashBands()函数返回时可能存在一些问题。它可能会返回比预期更大的东西。

bandBuckets[i][h.hashBands(forBuckets[i], bucketSize)]

对于此数组的第二维h.hashBands(forBuckets [i],bucketSize) - &gt;该值可能大于该部分的预期值.....