You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java写入球员列表到文件时出现IndexOutOfBoundsException如何解决

异常原因与解决方案

异常触发原因

  • 核心问题是使用同一个循环下标m访问两个互相独立的列表:
    • 外层循环的m是球队球员列表的遍历下标,取值范围由球队总球员数量决定
    • 单个球员的赛季记录列表seasonalRecords是独立的子列表,其长度和球队总球员数没有关联,直接用m作为下标访问该列表时,一旦m超过该列表的最大合法下标就会触发越界。你当前的报错就是循环到m=2时,对应球员的赛季记录列表只有2条元素(合法下标为0、1),访问下标2超出范围导致异常。

正确写入实现

根据输入文件的两种常见格式,对应实现如下:

格式1:每条赛季记录单独成行,每行包含球员基础信息+单赛季数据

pw.write(t1.getName() + "; " + t1.getCity() + "\n");
// 遍历所有球员
for (int m = 0; m < t1.getPlayerList().size(); m++) {
    Player currentPlayer = t1.getPlayerList().get(m);
    // 单独遍历当前球员的所有赛季记录,使用独立下标
    for (int n = 0; n < currentPlayer.getSeasonalRecords().size(); n++) {
        pw.print(currentPlayer.getName() + "; " + currentPlayer.getHeight() + "; ");
        pw.println(currentPlayer.getSeasonalRecords().get(n).getScores());
    }
}

格式2:每个球员单占一行,行末拼接该球员所有赛季数据

pw.write(t1.getName() + "; " + t1.getCity() + "\n");
for (int m = 0; m < t1.getPlayerList().size(); m++) {
    Player currentPlayer = t1.getPlayerList().get(m);
    pw.print(currentPlayer.getName() + "; " + currentPlayer.getHeight() + "; ");
    List<SeasonRecord> records = currentPlayer.getSeasonalRecords();
    // 拼接所有赛季得分,分隔符和输入文件保持一致即可
    for (int n = 0; n < records.size(); n++) {
        if (n != 0) pw.print(", ");
        pw.print(records.get(n).getScores());
    }
    pw.println();
}

注意:原代码中循环条件使用m < p2.size(),如果p2和t1.getPlayerList()是同一份数据,直接用后者作为循环边界更稳妥,避免两个列表不同步导致的额外问题。

内容的提问来源于stack exchange,提问作者 匿名用户

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:36:04