1

在 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

如果我只在第 1 天比赛中添加了夹具“A 队对 B 队”,那么它在比赛第 2 天和第 3 天的表现如何?

4

2 回答 2

0

来自Javadoc:“返回的列表由该列表支持,因此返回列表中的非结构性更改会反映在该列表中,反之亦然。”

于 2013-03-06T22:34:31.923 回答
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>());
}

谢谢大家的回答:)

于 2013-03-08T12:58:35.410 回答