【问题标题】:My java program is getting an IndexOutOfBoundsException我的 java 程序得到一个 IndexOutOfBoundsException
【发布时间】:2014-06-06 16:30:40
【问题描述】:

当我的程序进入我的这部分代码时,它会出现运行时错误。首先我知道它根本没有缩进。我忘了这样做,所以我知道阅读起来很痛苦。这个方法传递了 7 个数组列表,其中两个是我自己做的类。

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

错误在这一行:

(aLeaderboard.get((aResult.get(counter)).getAwayNumber())).setawayWins();

如果您需要代码的任何其他部分,例如类本身,请询问 这是它产生的错误

> 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:\>

编辑: Away wins 是在排行榜类中声明的 int

public int awayWins;

套路胜是这个方法

public void setawayWins()
  {
  awayWins++;
  }

【问题讨论】:

  • “首先我知道它根本没有缩进。我忘了这样做,所以我知道阅读起来很痛苦”它,为什么要打扰其他人试图帮助你?
  • 张贴setawayWins的声明
  • 排行榜大小不等于 aResult.size()。 for 循环计数器在 aResult.size() 上循环。 aLeaderboard.get((aResult.get(counter)) 正在尝试访问不存在的行。
  • 我已经发布了setawayWins的声明
  • 我知道排行榜大小不等于 aResult 大小。aLeaderboard 应该是 20,而 aResult 应该是 270。

标签: java runtime-error indexoutofboundsexception


【解决方案1】:

问题可能出在(aResult.get(counter)).getAwayNumber()。它的值为 20,而 aLeaderboard 列表没有该索引。

【讨论】:

    【解决方案2】:

    我认为您将从 ArrayList "aLeaderboard"

    中检索出边缘元素

    举个例子——

    您的数组列表包含 5 个元素 {0,1,2,3,4},您将从数组列表中检索第 6 个元素。

    不幸的是,由于你跟随 vars 不清楚,我无法给出解决方案

    • 排行榜
    • 结果
    • getAwayNumber
    • setawayWins

    【讨论】:

      猜你喜欢
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 2017-04-21
      相关资源
      最近更新 更多