java - 创建一个可以在不重复的情况下分配团队的程序?

标签 java arrays arraylist shuffle sports-league-scheduling-problem

我希望创建一个计划,分配个团队每三天天互相比赛一次。但我也希望每个团队每天打两场比赛。我不希望他们在同一三天天内与同一个人扮演两次。

我需要将每个游戏按两个分组并随机化。一次将进行两场比赛。

这是所需的输出:

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();
  }

这是我使用此代码得到的输出。

Day 1
Team 1 -> 6
Team 2 -> 2
Team 3 -> 1
Team 4 -> 5
Team 5 -> 4
Team 6 -> 3
____________


Day 2
Team 1 -> 2
Team 2 -> 4
Team 3 -> 1
Team 4 -> 5
Team 5 -> 3
Team 6 -> 6

这样做的问题是:

-如果号码 3 被分配给团队 5,则号码 5 以后不应分配给号码 3。

-号码 1 不能分配给团队 1。

-如果第 4 队在第一天被分配了号码 5,则不应在第 2 或第 3 天为其分配相同的号码。

-团队列表需要随机并按两人分组。

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

最佳答案

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

enter image description here

您只需要白色三角形。每个细胞都是一个游戏。白色三角形代表每一个可以玩的独特游戏。请记住不要包括对角线,否则球队将与自己比赛。拥有 6 支球队后,您应该可以玩 15 种独特的游戏。更一般地说:g = n(n-1)/2

编写一个需要两个团队的游戏类,并为每个单元格创建一个游戏类。对该列表进行排序,您就可以尽可能独特地进行游戏。

关于java - 创建一个可以在不重复的情况下分配团队的程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29476982/

相关文章:

java - 为什么我的变量仅在将延迟放入 while(true) 循环中时才更新

java - ClassCastException是Spring boot启动批处理作业时将JobRepositoryFactoryBean强制转换为JobRepository引起的

java - java数组对象的所有索引都具有相同的值

javascript - 覆盖/替换多维数组中的值

java - 如何使用 ArrayList 编写 If 语句

java - OpenGL - 立方体正在本地位置进行平移,而不是全局位置

c# - Java中有没有类似于C#的 'AS'关键字的关键字

javascript - 如何使用 Jquery onclick 获取数组的下一个元素

java - 当循环到另一个列表java时尝试将元素添加到列表中

使用数组和 while 循环对询问的数字进行 Java 索引