for循环 - 检查数组中的数字是向上还是向下移动

时间:2015-06-16 13:38:29

标签: java arrays loops

我正在使用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;
    }
}

4 个答案:

答案 0 :(得分:1)

一个小的语义修正 - 编译器不会抛出任何异常 - 你的代码编译得很好。此代码的运行时执行会导致异常。

更重要的是,数组a包含从0a.length - 1的元素。您的代码尝试访问元素编号a.lengtha.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。您也可以省略最终条件(==)。