0

我想制作一个 Java 应用程序,用于电子竞技比赛。具体来说,此应用程序将用于 teampeak 服务器。

我希望将频道上的用户分成 5 组(他们将由 uniqid 和代表技能水平的数字标识)。

因此,当 5 个用户的技能级别介于 1 - 3 之间时,将被放置在一个组中,接下来的用户将被放置在另一个组中(每个 5 个),直到该列表/地图将不再能够成为 5 个组。

你能帮我出个主意吗?我知道如何从teampeak服务器获取uniqid,以及技能等级,但我不知道如何将它们随机分组并满足技能等级条件。

我尝试了一个哈希图,但失败了。

HashMap<Integer, Integer> teams = new HashMap<>();
                    for(Client c : api.getClients()){
                        if(c.getChannelId() == 2170){
                            if(api.getChannelByNameExact("[LOBBY] Cauta echipa",true).getTotalClients() >= 5) {
                                if (c.isInServerGroup(Integer.parseInt(Configuration.info().getProperty("SILVER1")))) {
                                    teams.put(c.getId(), 1);
                                }
                                if (c.isInServerGroup(Integer.parseInt(Configuration.info().getProperty("SILVER2")))) {
                                    teams.put(c.getId(), 2);
                                }
                                if (c.isInServerGroup(Integer.parseInt(Configuration.info().getProperty("SILVER3")))) {
                                    teams.put(c.getId(), 3);
                                }
                                if (c.isInServerGroup(Integer.parseInt(Configuration.info().getProperty("SILVER4")))) {
                                    teams.put(c.getId(), 4);
                                }
                                if (c.isInServerGroup(Integer.parseInt(Configuration.info().getProperty("SILVERE")))) {
                                    teams.put(c.getId(), 5);
                                }
                                while(teams.size() >= 5){
                                    teams.forEach((key, value) -> {
                                        System.out.println("Key : " + key + " Value : " +value);
                                        if(value > 1 && value < 5){
                                            teams.
                                        }
                                    });
                                }
                                teams.clear();
                            }
                    }
                }

例子

如果在一个teampeak频道上有20人技能等级在1 lvl -18 lvl,机器人将建立5人技能等级相近的团队(有+ - 1等级的差距)。例如,如果我的技能等级为 5,并且频道上至少有 4 个人技能等级在 3-5 之间,则这 5 个人(包括我自己)将被添加到列表或数组或其他任何内容中。在我们组成 5 人团队后,程序将继续运行,并形成具有相似技能水平的 5 人团队,直到不再可能(主房间将没有 5 人)。

4

1 回答 1

0
  1. 在我看来,您应该分为两组(ArrayLists)hightlevel 和 lowlevel,为此创建功能并检查技能级别(技能> 3)=> 高其他=> 低;
  2. 创建HashMap团队后;其中键 - id;和值 - 组数;
  3. 用运算符 for 和函数 MathRandom 完成第一组;价值++;当你有空的人时继续。
  4. 使用 MathRandom() 更改值 +1(它将是下一组)用下一个数组完成 HashMap;这是有效的,如果 ids - 整数和唯一。当然,您必须在放入地图后从 Array 元素中删除

您也可以尝试使用数据库 MongoDB 进行管理: 1.创建两个数据:高级和低级 2.使用 Pagebale 在第 5 页创建页面项;页数将是您的组号。使用方法未排序

于 2020-04-13T02:32:18.800 回答