Помогите Реализовать рандомное появление

  • Автор темы Автор темы NoooobKa
  • Дата начала Дата начала

NoooobKa

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
NoooobKa
Есть набор итемов, каждый айтем имеет свой шанс выпадения(0-100%). Как реализовать появление рандомного айтема? На уме только такая реализация:
Код:
        List<RandomizedItem> list = new ArrayList<>();//Лист предметов имеющих процент выпадения
        Map<Integer, ItemStack> map = new HashMap<>();//Мапа из которой будем получать рандомный айтем
        for (RandomizedItem item : list) {//Забиваем карту ключами = процентам(0-100), каждый ключ имеет свой айтем
            int size = map.size();
            for (int i = size + 1; i < item.getRandomValue(); i++) {
                map.put(i, item.getItem());
            }
        }
        ItemStack randomItem = map.get(new Random().nextInt(100) + 1);//Получаем рандомный айтем
Есть ли какие-то более простые пути?
 
У твоего варианта есть два недостатка:
1) Нет возможности указывать дробные шансы
2) Нет возможности указывать отношение весов вместо процентов (когда сумма не равна сотне)

Реализация, правда, тоже странноватая.
Вот пара других реализаций без этих недостатков, принцип схож:

Линейный код:
https://stackoverflow.com/questions/6737283/weighted-randomness-in-java

Отдельным объектом:
https://stackoverflow.com/questions/6409652/random-weighted-selection-in-java/30362366

Обе ссылки нашёл по запросу "java weighted random"
 
У твоего варианта есть два недостатка:
1) Нет возможности указывать дробные шансы
2) Нет возможности указывать отношение весов вместо процентов (когда сумма не равна сотне)

Реализация, правда, тоже странноватая.
Вот пара других реализаций без этих недостатков, принцип схож:

Линейный код:
https://stackoverflow.com/questions/6737283/weighted-randomness-in-java

Отдельным объектом:
https://stackoverflow.com/questions/6409652/random-weighted-selection-in-java/30362366

Обе ссылки нашёл по запросу "java weighted random"
Благодарю
 
Назад
Верх