-1

我正在尝试计算排序数组中任意两个数字之间的最短距离。我正在使用下面的算法对其进行测试,但我在下面直接收到以下错误;哪个说明我的数组超出范围,所以显然它正在尝试访问不在数组长度内的索引?不知道为什么,因为我在 for 循环中检查了长度。有人有线索吗?

public static void getSmallestDistance(int[] integersCount)
{

    int index = 0;

    for(int i = 1; i < integersCount.length; i++  )
    {
        if( Math.abs(integersCount[index] - integersCount[index + 1]) >
        Math.abs( integersCount[i] - integersCount[i + 1]))//line 73 were error is
        {
            index = i;
        }



    }
    System.out.println(index);
}

我收到以下错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1000
at ClosestPair.getSmallestDistance(ClosestPair.java:73)
at ClosestPair.main(ClosestPair.java:57)
4

5 回答 5

2

问题是数组的长度是 is的integersCount.length最大值,但是你用来索引数组,这是超出范围的。iintegersCount.length - 1i+1

因此,您需要i从 0 或 1 (根据需要)运行到integersCount.length - 2这意味着 i < integersCount.length - 2i <= integersCount.length - 1

于 2012-04-29T20:48:31.860 回答
1
for(int i = 1; i < integersCount.length; i++  )

应该

for(int i = 1; i < integersCount.length - 1; i++  )

既然你这样做了:

integersCount[i + 1])

ArrayIndexOutOfBound当 i 达到最大值时,它(当然)抛出一个。

正如其他一些回答者指出的那样,这是因为 java 数组是从 0 到 length-1 的索引,并且在 for 循环的最后一次迭代中, i 将是 length-1 ,因此 i+1 将是一个太大的索引。

于 2012-04-29T20:48:52.677 回答
0

integersCount[i + 1]在循环中导致"ArrayIndexOutOfBoundsException"

例如,如果您有 10 个项目,并且在 for 循环的最后一次运行中,i 将是 9,而 i + 1 将是 10,这将超出界限。

于 2012-04-29T20:49:45.590 回答
0

尝试将 for(int i = 1; i < integersCount.length; i++ ) 更改为 for(int i = 0; i < integersCount.length; i++ )

我相信数组从地址 0 开始,因此您需要从内容总数中减去 1 才能得到最后添加的数字。

编辑

将 integersCount.length-1 更改为正确的 integersCount.length 因为它应该低于 og 添加的数量,而不是低于添加的数量 - 1 ..

于 2012-04-29T20:50:13.153 回答
0
for(int i = 1; i < integersCount.length; i++  )
{
  if( Math.abs(integersCount[index] - integersCount[index + 1]) >
      Math.abs( integersCount[i] - integersCount[i + 1]))//line 73 were error is 
      {
        index = i;
      }

什么时候i = integersCount.length - 1是您尝试使用的数组的末尾,integersCount[i + 1]显然超出了数组的界限。

于 2012-04-29T20:50:56.150 回答