试图计算平均值,但我收到错误:java.lang.IndexOutOfBoundsException:Index:1,Size:1

时间:2017-04-19 16:59:09

标签: java

我正在尝试创建一个计算平均值的函数,但我一直收到一条错误信息,这真是令人沮丧,因为我知道这是一个超级简单的功能。我一直收到错误java.lang.IndexOutOfBoundsException,所以我知道它与索引错误有关,但我无法弄明白。

public int berekenGemiddeldeScore(){

    int result = 0;
    int i = 0;

    if (deelnemers.size() == 1){

        return deelnemers.get(1).getScore();
    }

    while (i< deelnemers.size() -1 ){

        result+=deelnemers.get(i).getScore();
        i++;
    }

    return result/deelnemers.size();

}

4 个答案:

答案 0 :(得分:0)

在Java和许多其他语言中,第一个索引是0,而不是1。在您的情况下,集合的大小为1,因此您可以使用get访问的唯一索引是0deelnemers.get(0)

如果尝试使用集合中不存在的索引进行访问,则会抛出类型IndexOutOfBoundsException的异常。

答案 1 :(得分:0)

用此代码替换您的代码 -

public int berekenGemiddeldeScore(){

int result = 0;
int i = 0;

if (deelnemers.size() == 1){
    return deelnemers.get(0).getScore();
}

while (i < deelnemers.size()){

    result+=deelnemers.get(i).getScore();
    i++;
}

return result/deelnemers.size();
}

答案 2 :(得分:0)

如果您的数组只有一个项目,“if (deelnemers.size() == 1)”数组的索引为0:

return deelnemers.get(0).getScore();

答案 3 :(得分:0)

这就是问题

if (deelnemers.size() == 1) {
    return deelnemers.get(1).getScore();
}

将return语句替换为

 return deelnemers.get(0).getScore();

编辑

如果列表大小为1,则没有理由遇到特殊情况。 想想这种方法

public int berekenGemiddeldeScore() {
    if (deelnemers.size() == 0) {
        return 0;
    }

    int result = 0;
    for (Score score : deelnemers) {
        result += score.getScore();
    }

    return result / deelnemers.size();
}