Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Как записать число в HashMap?

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

  1. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Самый лучший последний, так как позволяет избежать NullPointerException.
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    NulledCoder

    NulledCoder Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    NulledCoder
    Я думаю мне лучше сейчас юзать короткий вариант, т.к я использую сейчас в if() его.
     
  4. andreispas

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

    Баллы:
    78
    Skype:
    An.spas98
    Имя в Minecraft:
    cameronh16
     
  5. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Если увеличиваемое число будет отсутствовать в таблице, то вылетит NPE, так что лучше использовать последний вариант. В идеале его нужно реализовать в виде отдельного метода.
     
  6. Автор темы
    NulledCoder

    NulledCoder Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    NulledCoder
    Тогда мне нужно создавать много методов - бред.
    Пока сделаю второй вариант, посмотрим что да как выйдет.
     
  7. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Сделал метод для увеличения числа в таблице на единицу. Возвращает новое число.
    Код:
    public static <R, C> int incrementValue(Table<R, C, Integer> table, R row, C column)
        {
            Integer number = table.get(row, column);
            number = number == null ? 1 : number + 1;
            table.put(row, column, number);
            return number;
        }
    Использовать так:
    Код:
    incrementValue(table, "Петя", "case");
     
  8. andreispas

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

    Баллы:
    78
    Skype:
    An.spas98
    Имя в Minecraft:
    cameronh16
    Много методов? С чего бы это?
     
  9. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Ваш подход означает, что в мире станет одним глючным плагином больше. Если есть возможность избежать потенциальной ошибки, то лучше это сделать.
     
  10. Автор темы
    NulledCoder

    NulledCoder Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    NulledCoder
    А если я захочу очистить петины еденицы?
     
  11. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Код:
    table.remove("Петя", "case");
     
  12. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Элементарно.
    HashMap<String, HashMap<?, ?>> map = new HashMap<String, HashMap<?, ?>>();
    HashMap<String, Integer> map2 = new HashMap<String, Integer>();
    map2.put("case", 10);
    map.put(p, map2);
     
  13. andreispas

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

    Баллы:
    78
    Skype:
    An.spas98
    Имя в Minecraft:
    cameronh16
    Решение же уже описали выше
     
  14. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Тут решение без сторонних библиотек.
    Читается и перезаписывается на изи.

    map.get(p).get("case");
    map.get(p).put("case", 20);
     
  15. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Сомневаюсь, что в данном случае стоит считать Guava сторонней библиотекой, ведь она уже есть в ядре => лучше не городить свои костыли, а применить удобное проверенное решение.
     
  16. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    А чем это не удобное и не проверенное? И так можно хранить любое число мап.
     
  17. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    В вашем случае ТС'у придётся вручную контролировать работу с этими мапами, а так как знания Java у него посредственные, то вероятность сделать ошибку сильно возрастает. При использовании же Table можно просто вызывать готовые методы.
     
  18. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    И только я пользуюсь классами для хранения мультизначений?:D
    Код:
    public class Meta {
        private final String type;
        private int value;
        private boolean isNecessary;
        public Meta(String type, int value, boolean isNecessary) {
            this.type = type;
            this.value = value;
            this.isNecessary = isNecessary;
        }
        //ну и дальше инкапсуляции и нужные мне методы
    }
    Код:
    private final HashMap<String, Meta> metas = new HashMap<>();
     
  19. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Не только ты, но тс не осилил банальную мапу. Думаешь это он осилит?
     
  20. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Не только. Я, например, тоже пользуюсь. И удобнее, и производительность выше.
     
  21. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Ну на счёт производительности я сомневаюсь (только давайте без замеров затрат наносекунд), но это точно удобнее.
    Имхо, это изич. В конце концов, java это ООП, а не процедурный яп.
     

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