The problem is probably with (aResult.get(counter)).getAwayNumber()
. It has a value of 20 and the aLeaderboard list does not have that index.
My java program is getting an IndexOutOfBoundsException
-
07-07-2023 - |
Question
When my program enters this part of my code it gets a runtime error.First off I know its not indented at all.I forgot to do that so I know it is a pain to read.This method is passed 7 array lists,two of which are my own classes I made.
public static void leaderboards(ArrayList<String> teamName, ArrayList<Outcome> aOutcome, ArrayList<Fixture> aFixture, ArrayList<Integer> awayScore, ArrayList<Integer> homeScore, ArrayList<Integer> awayNum, ArrayList<Integer> homeNum) {
int tem, temps;
ArrayList<Leaderboard> aLeaderboard = new ArrayList<Leaderboard>();
for (int counter = 0; counter < teamName.size(); counter++) {
Leaderboard aLeaderboardEntry = new Leaderboard();
aLeaderboard.add(aLeaderboardEntry);
}
for (int counter = 0; counter < aOutcome.size(); counter++) {
tem = (aFixture.get(counter)).getHomeNumber();
temps = (aFixture.get(counter)).getAwayNumber();
(aLeaderboard.get(tem - 1)).setGamesPlayed();
(aLeaderboard.get(temps - 1)).setGamesPlayed();
}
ArrayList<Results> aResult = new ArrayList<Results>();
for (int counter = 0; counter < aOutcome.size(); counter++) {
Results aResultsEntry = new Results();
aResult.add(aResultsEntry);
(aResult.get(counter)).setFixtureNumber(counter + 1);
(aResult.get(counter)).setHomeNumber(homeNum.get(counter));
(aResult.get(counter)).setAwayNumber(awayNum.get(counter));
(aResult.get(counter)).setHomeScore(homeScore.get(counter));
(aResult.get(counter)).setAwayScore(awayScore.get(counter));
}
for (int counter = 0; counter < aResult.size(); counter++) {
if (((aResult.get(counter)).getHomeScore()) > ((aResult.get(counter)).getAwayScore())) {
(aLeaderboard.get((aResult.get(counter)).getHomeNumber())).sethomeWins();
(aLeaderboard.get((aResult.get(counter)).getHomeNumber())).setTotalPoints(3);
(aLeaderboard.get((aResult.get(counter)).getAwayNumber())).setawayLosses();
} else if (((aResult.get(counter)).getHomeScore()) == ((aResult.get(counter)).getAwayScore())) {
(aLeaderboard.get((aResult.get(counter)).getHomeNumber())).sethomeDraws();
(aLeaderboard.get((aResult.get(counter)).getHomeNumber())).setTotalPoints(1);
(aLeaderboard.get((aResult.get(counter)).getAwayNumber())).setawayDraws();
(aLeaderboard.get((aResult.get(counter)).getAwayNumber())).setTotalPoints(1);
} else if (((aResult.get(counter)).getHomeScore()) < ((aResult.get(counter)).getAwayScore())) {
(aLeaderboard.get((aResult.get(counter)).getHomeNumber())).setHomeLosses();
(aLeaderboard.get((aResult.get(counter)).getAwayNumber())).setawayWins();
(aLeaderboard.get((aResult.get(counter)).getAwayNumber())).setTotalPoints(3);
}
}
for (int counter = 0; counter < aResult.size(); counter++) {
(aLeaderboard.get((aResult.get(counter)).getHomeNumber())).setHomeGoalsFor((aResult.get(counter)).getHomeScore());
(aLeaderboard.get((aResult.get(counter)).getHomeNumber())).setHomeGoalsAgainst((aResult.get(counter)).getAwayScore());
(aLeaderboard.get((aResult.get(counter)).getAwayNumber())).setAwayGoalsFor((aResult.get(counter)).getAwayScore());
(aLeaderboard.get((aResult.get(counter)).getAwayNumber())).setAwayGoalsAgainst((aResult.get(counter)).getHomeScore());
}
for (int counter = 0; counter < aLeaderboard.size(); counter++) {
int goalsFor = (aLeaderboard.get(counter)).getHomeGoalsFor() + (aLeaderboard.get(counter)).getAwayGoalsFor();
int goalsAgainst = (aLeaderboard.get(counter)).getHomeGoalsAgainst() + (aLeaderboard.get(counter)).getAwayGoalsAgainst();
int goalDifference = goalsFor - goalsAgainst;
(aLeaderboard.get(counter)).setGoalsDifference(goalDifference);
}
System.out.println(" Positon Team Games Played Home Wins Home Draws Home Losses Home Goals For Home Goals Against Away Wins Away Draws Away Losses Away Goals For Away Goals Against Goal Difference Total Points");
}
for(int counter = 0; counter<teamName.size();counter++) {
System.out.print((counter + 1) + " " + teamName.get(counter) + " " + (aLeaderboard.get(counter)).getGamesPlayed() + " " + (aLeaderboard.get(counter)).getHomeWins() + " " + (aLeaderboard.get(counter)).getHomeDraws() + " ");
System.out.print((aLeaderboard.get(counter)).getHomeLosses());
System.out.println();
}
The error is on this line:
(aLeaderboard.get((aResult.get(counter)).getAwayNumber())).setawayWins();
If ye need any other parts of the code such as the classes themselves just ask This is the error it produces
> D:\>java Project4 Exception in thread "main"
> java.lang.IndexOutOfBoundsException: Index: 20, Size: 20
> at java.util.ArrayList.rangeCheck(Unknown Source)
> at java.util.ArrayList.get(Unknown Source)
> at Project4.leaderboards(Project4.java:198)
> at Project4.main(Project4.java:114)
>
> D:\>
Edit: Away wins is an int declared in The Leaderboards class
public int awayWins;
Set away wins is this method
public void setawayWins()
{
awayWins++;
}
Solution
OTHER TIPS
I think you are going to retrieve out of margin element from the ArrayList "aLeaderboard"
for a example-
Your arraylist consist with 5 element {0,1,2,3,4}, You are going to retrieve 6th element from the arraylist.
Unfortunately i cant give a solution due to un-clearness of yo following vars
- aLeaderboard
- aResult
- getAwayNumber
- setawayWins