1

I am trying to create a function to calculate an average, but I keep getting an error message, which is really frustrating because I know it is a super easy function. I keep getting the error java.lang.IndexOutOfBoundsException so I know it has something to do with an index error but I can't figure it out.

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();

}
RandomStacker
  • 117
  • 1
  • 6

4 Answers4

0

In Java and many other languages the first index is 0, not 1. In your case the collection has size 1, so the only index you can access using get is 0: deelnemers.get(0).

If you try to access using an index that does not exist in the collection, an exception of type IndexOutOfBoundsException is thrown.

C-Otto
  • 5,615
  • 3
  • 29
  • 62
0

Replace your code with this-

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();
}
Barno
  • 766
  • 7
  • 15
0

If you have an array with only one item, "if (deelnemers.size() == 1)" the index of your array is 0:

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

rodrigo
  • 342
  • 1
  • 2
  • 12
0

This is the issue

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

Replace return statement with

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

Edit

There is no reason for a special case if list size is one. Think about this approach

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

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

    return result / deelnemers.size();
}
djm.im
  • 3,295
  • 4
  • 30
  • 45