ArrayIndexOutOfBoundsException,同时查找数组中两个连续元素之间的最大差异

时间:2014-01-24 17:42:03

标签: java arrays for-loop indexoutofboundsexception

我找不到逻辑算法来查找数组中两个连续索引之间的最大差异。当我在我的代码中使用该方法时,我的客户端页面给了我一个错误,说我有一个 outofbounds Exception 。有什么建议?如果您需要更多代码,请询问。

//method returning the largest change between two consecutive days
    public int NetChange()
    {
      int BiggestNet = temps[0] - temps[1];
      for( int i = 0; i < temps.length; i++ )
      {
         if( (temps[i] - temps[i+1]) > BiggestNet )
         {
            BiggestNet = (temps[i] - temps[i+1]);
         }
      }
      return BiggestNet;
     } 

错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
    at Forecast.NetChange(Forecast.java:105)
    at Forecast.toString(Forecast.java:120)
    at ForecastClient.main(ForecastClient.java:12

4 个答案:

答案 0 :(得分:3)

问题在于这两段代码...... i < temps.lengthtemps[i+1]

当i等于temps.length -1(循环的最后一次迭代)时,i + 1将等于temps.length。这意味着当阵列有10个元素时,您正在尝试访问数组[10]。但是数组只包含0到9作为索引。

i < temps.length更改为i < temps.length-1将解决问题..

答案 1 :(得分:2)

更改

for( int i = 0; i < temps.length; i++ )

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

temps.length将为您提供不使用基于零的计数的数组的长度,但它可以通过基于零的指示来访问。因此,如果i = temps.length - 1,那实际上是数组中的最后一个元素。如果你然后尝试访问比你的数组更长的temps [i + 1],那么就越界了。

答案 2 :(得分:1)

由于你的循环变量i0变为temps.length - 1(因为<)并且你身体已经

temps[i+1]

i获取temps.length - 1的值(它可以采用的最后一个值)时,到达时

temps[temps.length - 1 + 1]

相同
temps[temps.length]

它会引发一个异常,因为只能从0length - 1访问数组。

如何解决此问题?您可以尝试减少i1的最后一个值。换句话说:

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

答案 3 :(得分:1)

temps [i + 1]是问题

当我是最后一个索引时,i + 1将给出异常。