【问题标题】:How can I divide an arraylist of custom objects into groups of x based on the attributes of each object in the arraylist?如何根据数组列表中每个对象的属性将自定义对象的数组列表分成 x 组?
【发布时间】:2019-12-01 15:23:23
【问题描述】:

我一直在努力解决这个问题,但我仍在摸不着头脑。我需要将一个对象数组列表(在这种情况下为人)分成 6 个相等的组,总共 12-25 人。他们需要分成 6 人一组,两半按每个人对象的 AttackStatDefenseStat 中的最佳值排序。我已经编写了算法来根据每个统计数据的最佳值对数组列表进行排序,但我不确定如何实现一种方法来显示没有重复名称的六个组。

我得到了指示:

您的计划需要能够将名册划分为尽可能多的团队。例如,一个有 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);
  }
}

我试图弄清楚这一点,我浏览了这个网站并在谷歌上搜索了大约一百次,但我似乎找不到合适的方法来实现排序划分并且将我的自定义对象按本地值分配到最多六人组中,而在同一个混战团队中没有任何重复的人。

【问题讨论】:

    标签: java arraylist


    【解决方案1】:

    首先,循环中的条件强制团队为一个特定长度,在本例中为 36,因为我想您不希望团队中有重复的玩家。我很确定你的教授想要一个能够为 n 名玩家工作的解决方案。

    这就是说,我认为您必须解决整个部门的 / 运算符。假设您指定 n = 31。n/6 将给出5 的结果。然后你得到了你拥有的团队的数量,所以你的方法 createTeams 必须有一个循环 5 次迭代,你可以在其中创建一个新的 ArrayList。我建议使用另一个动态结构来拯救每个团队,例如另一个 ArrayList

    创建“球队”后,您可以正确地对球员进行排序,然后将他们添加到不同的球队中。在这里我们可以找到重复的问题。确保不要通过以下方式添加两次相同的玩家:a)将洞列表保存在辅助结构上,一旦你选择它们就会将它们删除 b)小心地使用相同的指针指向代表公鸡的初始结构

    我想你明白了,你使用的方法是正确的,但你必须研究算法。 祝你好运,有任何问题欢迎随时提问。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-17
      • 2019-02-11
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 2016-05-18
      相关资源
      最近更新 更多