1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Проблема с отправкой сообщения (HashMap)

Тема в разделе "Разработка плагинов для новичков", создана пользователем nachzehrer, 18 дек 2021.

Метки:
  1. Автор темы
    nachzehrer

    nachzehrer Ньюби

    Баллы:
    1
    Имя в Minecraft:
    n4chzehrer
    Привет, нужна помощь вот с этим:
    upload_2021-12-18_21-23-40.png
    В hashmap занесены 2 игрока, после того как значение переходит на ноль и пришло время удалять игроков из hashmap'a, удаляется только один игрок и сообщение о истечении времени приходит только одному игроку.
     
  2. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Во-первых, насколько я понял - метод replaceAll сразу автоматически проходит по всему Map, поэтому это очень грубая ошибка пихать его в forEach. А так получается у тебя цикл в цикле получается и скорее всего значения уходят в минус (можно было бы сделать дебаг, чтобы понять, что творится внутри HashMap). Просто вынеси метод replaceAll перед forEach.

    Во-вторых, зачем условие if (pvp.time.get(k) == 0), если у тебя значение уже идет в .forEach((k,v)) -> //v - твое значение. Сразу проверяй переменную v. if (v == 0)

    Пока что такие советы. Нужно тестировать и проверять.
     
  3. LOVEC3327

    LOVEC3327 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    ConcurrentModificationException для тебя шутка какая-то? Нельзя удалять элементы во время итерации.
     
  4. Автор темы
    nachzehrer

    nachzehrer Ньюби

    Баллы:
    1
    Имя в Minecraft:
    n4chzehrer
    Спасибо, решено.
     
  5. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Для такого нужно использовать Iterator. Правильно ж? Вот в нем можно удалять элементы во время итерации.
     
  6. LOVEC3327

    LOVEC3327 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Да, it.remove. Но я бы сделал так:
    PHP:
    map.entrySet().removeIf(-> {
        if (
    e.setValue(e.getValue() - 1) - <= 0) {
            
    System.out.println(e.getKey());
            return 
    true;
        }
        return 
    false;
    });
     
    Последнее редактирование: 19 дек 2021

Поделиться этой страницей