以下是我的代码的一部分。 对于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;
}
答案 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;该值可能大于该部分的预期值.....