Группировка 5 предметов, отсортированных по критериям - PullRequest
0 голосов
/ 13 апреля 2020

Я хочу сделать заявку java, предназначенную для соревнований по киберспорту. В частности, это приложение предназначено для сервера teampeak.

Я хочу, чтобы пользователи на канале были отсортированы по группам по 5 (они будут идентифицироваться по уникальному идентификатору и числу, представляющему уровень навыка).

Таким образом, когда 5 пользователей находятся между 1 и 3 уровнями квалификации для помещения в одну группу, последующие в другой группе (каждая из 5) и до тех пор, пока этот список / карта больше не сможет составлять группы из 5 человек. .

Можете ли вы помочь мне с идеей? Я знаю, как получить uniqid с сервера teampeak, а также уровень квалификации, но я не знаю, как случайным образом сгруппировать их и выполнить условие уровня навыка.

Я пробовал хэш-карту, но она не удалась .

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

Пример :

Если на канале TeamSpeak есть 20 человек с уровнем навыка 1 уровня -18 , робот будет собирать команды из 5 человек с одинаковым уровнем квалификации (с запасом + - 1 уровень). Например, , если у меня есть уровень квалификации 5 , и на канале есть по крайней мере 4 человека с уровнем навыка между 3-5, 5 человек (включая меня) будут добавлены в список или массив или без разницы. После того как мы сформировали команду из 5 человек, программа продолжит работу и сформирует команды из 5 человек с одинаковым уровнем квалификации, пока это больше не будет возможно (в основной комнате не будет 5 человек).

1 Ответ

0 голосов
/ 13 апреля 2020
  1. На мой взгляд, вы должны разделить на две группы (ArrayLists) высокий уровень и низкий уровень, для этой функции создания и проверки уровня навыков (навыки> 3) => высота еще => низкий;
  2. После создать команду HashMap; где ключи - идентификаторы; и значение - номера группы;
  3. С оператором и функцией MathRandom завершить первую группу; значение ++; Продолжайте, пока у вас есть свободные люди.
  4. Измените значение +1 (это будет следующая группа), завершите HashMap следующим массивом, используя MathRandom (); Это работает, если идентификаторы - целочисленные и уникальные. Конечно, вы должны удалить элемент Array после помещения в карту

Также вы можете попробовать управлять базами данных MongoDB: 1.Создать два типа данных: высокий и низкий уровень 2. С помощью Pagebale создайте элементы страницы на странице 5; номер страницы будет номером вашей группы. Используйте несортированный метод

...