我找不到逻辑算法来查找数组中两个连续索引之间的最大差异。当我在我的代码中使用该方法时,我的客户端页面给了我一个错误,说我有一个 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
答案 0 :(得分:3)
问题在于这两段代码...... i < temps.length
和temps[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)
由于你的循环变量i
从0
变为temps.length - 1
(因为<
)并且你身体已经
temps[i+1]
当i
获取temps.length - 1
的值(它可以采用的最后一个值)时,到达时
temps[temps.length - 1 + 1]
与
相同temps[temps.length]
它会引发一个异常,因为只能从0
到length - 1
访问数组。
如何解决此问题?您可以尝试减少i
中1
的最后一个值。换句话说:
for(int i = 0; i < temps.length - 1; i++)
答案 3 :(得分:1)
temps [i + 1]是问题
当我是最后一个索引时,i + 1将给出异常。