在Java中,我正在为一个包含4支球队的联赛创建一个足球赛具生成器。
我有一个名为'matchDays'的二维数组列表,其中包含6个匹配日数组列表。每个比赛日包含2个灯具对象。
我正在尝试迭代matchDays,并且对于每个比赛日,从我单独创建的所有可能灯具的列表中添加2个灯具对象。问题是当我添加一个灯具以匹配第1天时,它也会被添加到第2天到第6天。
以下代码来自我编写的测试用例,突出了我遇到的问题:
@Test
public void arrayListTest() {
FixtureGenerator fixGen = new FixtureGenerator();
// Generate all possible fixtures
List<Fixture> fixtures = fixGen.generateFixtures();
// Create list of all 4 participating teams
List<Club> clubs = fixGen.createListOfClubs();
// Create 6 lists (match days) to store 2 fixtures in each
List<List<Fixture>> matchDays = fixGen.createMatchDaysList(clubs);
matchDays.get(0).add(fixtures.get(0));
System.out.println("Match day 1, fixture 1: " + matchDays.get(0).get(0).getHomeTeam() +
" v " + matchDays.get(0).get(0).getAwayTeam());
System.out.println("Match day 2, fixture 1: " + matchDays.get(1).get(0).getHomeTeam() +
" v " + matchDays.get(1).get(0).getAwayTeam());
System.out.println("Match day 3, fixture 1: " + matchDays.get(2).get(0).getHomeTeam() +
" v " + matchDays.get(2).get(0).getAwayTeam());
}
此代码生成以下控制台输出:
Match day 1, fixture 1: Team A v Team B
Match day 2, fixture 1: Team A v Team B
Match day 3, fixture 1: Team A v Team B
如果我只添加了'Team A v Team B'以匹配第1天,那么它是如何在比赛第2天和第3天出现的?
答案 0 :(得分:0)
来自Javadoc:“返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,反之亦然。”
答案 1 :(得分:0)
找到问题代码。我使用@LuiggiMendoza和@DaveNewton所述的相同引用填充matchDays列表,如下所示:
List<List<Fixture>> matchdays = new ArrayList<List<Fixture>>();
List<Fixture> matchday = new ArrayList<Fixture>();
for (int i = 0; i < noOfMatchDays; i++) {
matchdays.add(matchday);
}
我所要做的只是将其更改为以下内容,以便每个匹配日由其自己的列表对象表示:
List<List<Fixture>> matchdays = new ArrayList<List<Fixture>>();
for(int i = 0; i < noOfMatchDays; i++){
matchdays.add(new ArrayList<Fixture>());
}
感谢大家的答案:)