【发布时间】:2019-12-01 15:23:23
【问题描述】:
我一直在努力解决这个问题,但我仍在摸不着头脑。我需要将一个对象数组列表(在这种情况下为人)分成 6 个相等的组,总共 12-25 人。他们需要分成 6 人一组,两半按每个人对象的 AttackStat 和 DefenseStat 中的最佳值排序。我已经编写了算法来根据每个统计数据的最佳值对数组列表进行排序,但我不确定如何实现一种方法来显示没有重复名称的六个组。
我得到了指示:
您的计划需要能够将名册划分为尽可能多的团队。例如,一个有 18 名球员的名单将被分成三个不同的混战队,每队有 6 名球员。名册文件将始终包含 12 到 25 名球员的名单,而混战队总是有 6 名球员。
教练希望球队能够相当平衡。要做到这一点,你的程序应该通过将最好的攻击者分配给每个不同的团队来占每个混战队的一半。例如,一个有 12 名球员的球员名单将被分成 2 个混战队,前 6 名攻击手中的 3 名将被分配到两个混战队中的每一个。在顶级攻击手被分配到每个混战队的一半之后,然后将类似地分配顶级阻挡者(来自剩余的未分配球员)(在本例中,每个混战队三人)组成每队的另一半.
以下是我目前在名册课程中的一些内容:
void sortbyAttack() {
peopleArrayList.sort(Comparator.comparing(Person::getAttackStat).reversed());
}
void sortbyDefense() {
peopleArrayList.sort(Comparator.comparing(Person::getDefenseStat).reversed());
}
void makeTeams() {
ArrayList<String> team1 = new ArrayList<>();
ArrayList<String> team2 = new ArrayList<>();
ArrayList<String> team3 = new ArrayList<>();
ArrayList<String> team4 = new ArrayList<>();
sortbyAttack();
for (int i = 0; i < 6; i++) {
team1.add(peopleArrayList.get(i).toString());
}
for (int i = 6; i < 12; i++) {
team2.add(peopleArrayList.get(i).toString());
}
for (int i = 0; i < 3; i++) {
team3.add(team1.get(i).toString());
team3.add(team2.get(i).toString());
}
for (int i = 3; i < 6; i++) {
team4.add(team1.get(i).toString());
team4.add(team2.get(i).toString());
}
System.out.println(team1 + "\n" + team2);
System.out.println(team3 + "\n" + team4);
}
}
我试图弄清楚这一点,我浏览了这个网站并在谷歌上搜索了大约一百次,但我似乎找不到合适的方法来实现排序和划分并且将我的自定义对象按本地值分配到最多六人组中,而在同一个混战团队中没有任何重复的人。
【问题讨论】: