修改嵌套循环调整击剑选手对阵PDF表格的输出顺序
修改击剑选手对阵循环以优化参赛顺序
原代码
for (Fencerss fencer1 : team1.getFencers()) { for (Fencerss fencer2 : team2.getFencers()) { PdfPCell cell1 = new PdfPCell(new Phrase(fencer1.getName() + " " + "(" + fencer1.getNation() + ")")); PdfPCell cell2 = new PdfPCell(new Phrase(" ")); PdfPCell cell3 = new PdfPCell(new Phrase(" ")); PdfPCell cell4 = new PdfPCell(new Phrase(fencer2.getName() + " " + "(" + fencer2.getNation() + ")")); table.addCell(cell1); table.addCell(cell2); table.addCell(cell3); table.addCell(cell4); } }
当前输出
Fencer1 " " " " Fencer3 Fencer1 " " " " Fencer4 Fencer2 " " " " Fencer3 Fencer2 " " " " Fencer4
期望输出
Fencer1 " " " " Fencer3 Fencer1 " " " " Fencer4 Fencer2 " " " " Fencer4 Fencer2 " " " " Fencer3
修改后的代码
import java.util.ArrayList; import java.util.Collections; import java.util.List; // 提前获取team2的选手列表 List<Fencerss> team2Fencers = team2.getFencers(); for (int i = 0; i < team1.getFencers().size(); i++) { Fencerss fencer1 = team1.getFencers().get(i); List<Fencerss> currentTeam2; // 处理team1的第二位选手时,反转team2的遍历顺序 if (i == 1) { currentTeam2 = new ArrayList<>(team2Fencers); Collections.reverse(currentTeam2); } else { currentTeam2 = team2Fencers; } for (Fencerss fencer2 : currentTeam2) { PdfPCell cell1 = new PdfPCell(new Phrase(fencer1.getName() + " (" + fencer1.getNation() + ")")); PdfPCell cell2 = new PdfPCell(new Phrase(" ")); PdfPCell cell3 = new PdfPCell(new Phrase(" ")); PdfPCell cell4 = new PdfPCell(new Phrase(fencer2.getName() + " (" + fencer2.getNation() + ")")); table.addCell(cell1); table.addCell(cell2); table.addCell(cell3); table.addCell(cell4); } }
说明
原循环对每一位team1选手都按固定顺序遍历team2,导致Fencer3的参赛场次间隔不合理。修改后:
- 遍历team1选手时通过索引判断是否为第二位选手
- 对第二位team1选手,反转team2的遍历顺序,让Fencer4连续参加第2、3场比赛,Fencer3则在第1、4场参赛,符合击剑比赛中选手需要连续或间隔参赛的准备需求。
内容的提问来源于stack exchange,提问作者Moustafa Amr
相关产品推荐
相关产品推荐

