Java 创建一个不会重复分配团队的计划?

Java 创建一个不会重复分配团队的计划?,java,arrays,arraylist,shuffle,Java,Arrays,Arraylist,Shuffle,我希望创建一个程序,分配六个团队每三天进行一次比赛。但我也希望每支球队每天打两场比赛。我不希望他们在三天的同一时间内扮演同一个人两次 我需要将每场比赛按两个分组并随机分组。一次将有两场比赛 以下是所需的输出: Day 1: Day 2: Day 3: Team 1 -> Team 6 | Team 1 -> Team 4 | Team 1 -> Team 2 Team 2 -> Team 5 | Team 2 ->

我希望创建一个程序,分配
六个
团队每
三天进行一次比赛。但我也希望每支球队每天打两场比赛。我不希望他们在三天的同一时间内扮演同一个人两次

我需要将每场比赛按
两个
分组并随机分组。一次将有两场比赛

以下是所需的输出:

Day 1:             Day 2:             Day 3:

 Team 1 -> Team 6 | Team 1 -> Team 4 | Team 1 -> Team 2
 Team 2 -> Team 5 | Team 2 -> Team 3 | Team 3 -> Team 4
 ________________ | ________________ | ________________
                  |                  |
 Team 3 -> Team 1 | Team 3 -> Team 6 | Team 5 -> Team 6
 Team 4 -> Team 2 | Team 4 -> Team 5 |
 ________________ | ________________ |
                  |                  |
 Team 5 -> Team 4 | Team 5 -> Team 1 |
 Team 6 -> Team 3 | Team 6 -> Team 2 |
它不需要像这样格式化,但这只是一个一般的想法

首先,我想让它循环三次,但是我想确保它没有分配一个数字,如果这个数字已经在循环序列中使用过

我相信代码应该是这样的:

Integer[] teams = new Integer[6];

  for (int i = 0; i < 6; i++) {
     teams[i] = i + 1;
  }

  for (int i = 0; i < 3; i++) {
     Collections.shuffle(Arrays.asList(teams)); 

     System.out.printf("Team 1 -> %s%n", teams[0]);
     System.out.printf("Team 2 -> %s%n", teams[1]);
     System.out.printf("Team 3 -> %s%n", teams[2]);
     System.out.printf("Team 4 -> %s%n", teams[3]);
     System.out.printf("Team 5 -> %s%n", teams[4]);
     System.out.printf("Team 6 -> %s%n", teams[teams.length - 1]);

     System.out.println("____________");
     System.out.println();
     System.out.println();
  }
这方面的问题是:

-如果编号3被分配给第5组,则编号5不应在以后分配给编号3

-无法将编号1分配给团队1

-如果第4组在第1天被分配了数字5,则不应在第2天或第3天分配相同的数字

-团队列表需要随机分组


我不太确定如何着手解决这些问题。任何帮助都将不胜感激。

使用两个循环。一个在另一个里面。循环以形成此形状的三角形:

你只需要白色三角形。每个细胞都是一个游戏。白三角是每一个独特的游戏,可以发挥。记住不要包括对角线,否则球队将与自己对抗。有了6支球队,你应该可以得到15场独特的比赛。更一般地说:g=n(n-1)/2


编写一个包含两个团队的游戏类,并为每个单元创建一个。对列表进行排序,您就可以尽可能地进行唯一的播放

以下是一些可能的组合。如果你不需要每次的作业都是随机的或不同的,你可以使用最后一个例子。否则,我认为如果您创建6个数组,然后一次填充一列,那么您将得到它。如果没有更多有效的赋值可用,我有时不得不返回并更改同一列中以前的赋值,因此您的算法可能也需要这样做。如果这还没有意义,那么我建议你自己写更多的团队任务组合,以便更好地直观地理解问题

1 >> 2, 3, 4, 5, 6
2 >> 1, 4, 5, 6, 3
3 >> 5, 1, 6, 4, 2
4 >> 6, 2, 1, 3, 5
5 >> 3, 6, 2, 1, 4
6 >> 4, 5, 3, 2, 1

1 >> 2, 3, 4, 5, 6
2 >> 1, 5, 6, 4, 3
3 >> 4, 1, 5, 6, 2
4 >> 3, 6, 1, 2, 5
5 >> 6, 2, 3, 1, 4
6 >> 5, 4, 2, 3, 1

1 >> 6, 5, 4, 3, 2
2 >> 1, 6, 5, 4, 3
3 >> 2, 1, 6, 5, 4
4 >> 3, 2, 1, 6, 5
5 >> 4, 3, 2, 1, 6
6 >> 5, 4, 3, 2, 1

就数学而言,没有足够的游戏来填满3天。每个队每天必须打2场比赛,有3天,因此每个队需要6场独特的比赛。但只有5支球队可以与之竞争。因此,每个队都需要有一个空白点来填补这6场比赛。这在算法上可以表示为将一个团队分配给自己(不匹配)。是否有方法在该循环结束后立即开始下一个循环?
1 >> 2, 3, 4, 5, 6
2 >> 1, 4, 5, 6, 3
3 >> 5, 1, 6, 4, 2
4 >> 6, 2, 1, 3, 5
5 >> 3, 6, 2, 1, 4
6 >> 4, 5, 3, 2, 1

1 >> 2, 3, 4, 5, 6
2 >> 1, 5, 6, 4, 3
3 >> 4, 1, 5, 6, 2
4 >> 3, 6, 1, 2, 5
5 >> 6, 2, 3, 1, 4
6 >> 5, 4, 2, 3, 1

1 >> 6, 5, 4, 3, 2
2 >> 1, 6, 5, 4, 3
3 >> 2, 1, 6, 5, 4
4 >> 3, 2, 1, 6, 5
5 >> 4, 3, 2, 1, 6
6 >> 5, 4, 3, 2, 1