我正在使用for循环来检查作为参数输入的数组是否在整数方面有更多的起伏。我不确定为什么,但我的编译器抛出一个超出范围的索引异常。如果有人可以指出它会很好。
public boolean moreUpsThanDowns(int[] a)
{
int counterup = 0;
int counterdown = 0;
for(int i=0 ; i <= a.length ; i++){
if (a[(i+1)] - a[i] > 0 ){
counterup++;
} else if(a[(i+1)] - a[i] < 0 ){
counterdown++;
} else if(a[(i+1)] - a[i] == 0 ){
counterup = counterup;
counterdown = counterdown;
}
}
if (counterup > counterdown){
return true;
} else {
return false;
}
}
答案 0 :(得分:1)
一个小的语义修正 - 编译器不会抛出任何异常 - 你的代码编译得很好。此代码的运行时执行会导致异常。
更重要的是,数组a
包含从0
到a.length - 1
的元素。您的代码尝试访问元素编号a.length
和a.length + 1
,这会导致此异常。由于您在代码中引用了a[i + 1]
,因此您的循环应该以{{1}}结尾,或者更简洁地说,条件应该是:a.length - 2
。所以总结一下:
i < a.length - 1
答案 1 :(得分:1)
由于这一行,您将获得越界异常:
for(int i=0 ; i <= a.length ; i++){
应该是:
for(int i=0 ; i < a.length ; i++){
这是因为c#中的数组是0索引。
例如,如果一个数组有10个元素并且你像[10]那样访问它,那么你会得到一个越界异常,因为最后一个元素是[9]。
答案 2 :(得分:1)
数组从索引0开始,所以如果数组包含3个元素。最后一个元素是[2] 所以
for(int i=0 ; i <= a.length ; i++) must be for(int i=0 ; i < a.length ; i++)
并且必须检查i + 1&lt;是否长度
if(i+1 < a.length)
答案 3 :(得分:1)
对于基于零的索引,范围为[0,a.length)
。循环不仅越界,+1
更进一步。尝试,
for (int i = 1; i < a.length; i++)
if (a[i] - a[i-1] > 0)
counterup++;
挑剔,你只需要一个柜台。增加,减少减少。如果最终计数大于零,则返回true。您也可以省略最终条件(==
)。