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,提问作者 匿名用户
相关产品推荐
相关产品推荐

