Java получает случайное значение из списка по процентному шансуJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Java получает случайное значение из списка по процентному шансу

Сообщение Anonymous »

у меня есть список:

Код: Выделить всё

public List classes = Arrays.asList(
Collections.singletonMap(0, new Rarity("rarity_default", "Default!", 55.0)),
// ...
);
55,0 — это вероятность 55% в этом списке.
Я хочу получить случайный класс редкости из этих классов, но получил его случайно. из этого.
Например, у меня есть такие шансы:
  • rarity_A: 55,00%
  • rarity_B: 35,00%
  • rarity_C: 12,00%
  • rarity_D: 6,00%
  • rarity_E : 3.00%
  • rarity_F: 0.10%
Кроме того, я не хочу, чтобы предмет всегда получался как Я пробовал закодировать сам, но до 12,00% работало, а ниже редкости не даст. А также это дало бы мне редкость с наивысшим шансом, а не ничего, потому что я не хочу всегда ее получать.
В настоящее время вот мой код:

Код: Выделить всё

  private final Map classes = new HashMap();

private final Random random = new Random();

public MobKillListener() {
for (Map rarityMap : SchemePlugin.getInstance().getSchemeConfig().classes) {
classes.putAll(rarityMap);
}
}

@EventHandler
public void onMobKill(EntityDeathEvent event) {
if (!(event.getEntity().getKiller() instanceof Player))
return;

Map rarities = new HashMap();

for (Map.Entry entry : classes.entrySet()) {
rarities.put(entry.getValue(), entry.getValue().rarity); // i need to remake the map
}

Rarity rarity = random(rarities);
if (rarity != null) {
// do my stuff
}
}

// i don't want to see this function ever again, this made me so mad..
public  T random(Map map) {
double rand = (double) new Random().nextInt(10000001) / 100000.0D;
double total = 0.0D;

for (T t : map.keySet()) {
double chance = map.get(t) / 4.0D;
total += chance;

if (total >= rand) {
System.out.println("(" + chance + ") " + "Got " + total + ", rand: " + rand);
return t;
}
}
System.out.println("Got " + total + ", rand: " + rand);

return null;
}

Да, я делаю это для плагина Spigot.

Подробнее здесь: https://stackoverflow.com/questions/783 ... age-chance
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Буквенные оценки Python по процентному баллу
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Как убедиться, что случайное целое число делится на другое случайное число в математической игре
    Anonymous » » в форуме Python
    0 Ответы
    63 Просмотры
    Последнее сообщение Anonymous
  • Объект объявлен нулевым, но получает случайное значение во время отладки
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Объект объявлен нулевым, но получает случайное значение во время отладки
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Создать случайное нарушение списка
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»