Вопрос

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++;
  }
Это было полезно?

Решение

The problem is probably with (aResult.get(counter)).getAwayNumber(). It has a value of 20 and the aLeaderboard list does not have that index.

Другие советы

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top