2017-01-27 9 views
-1

Мне нужна помощь. Я создаю плагин для мини-игр с картографическим голосованием, и я не знаю, как это сделать.Bukkit Карта Голосование

HashMap<World, Integer> votes = new HashMap<World, Integer>(); 

Скажем, голоса закрыты и сервер выбирает карту. Который из? Что, когда 2 карты будут иметь одинаковую цифру. голосов?

Спасибо за помощью, eNcoo.

+0

Я бы сказал, как только голосование закончит ваш заказ по вашему Integer. Затем просто выберите [0] (Index Zero). Это будет (если я прав), случайный шанс, если два или более имеют одинаковый счет. –

ответ

2

Tie-Breaker Голосуйте

Есть еще один голос, но ограничивает выбор в верхние миры одинаково высоким баллом.

Случайные Tie-выключатель

Используйте генератор случайных чисел, чтобы разорвать связь, например, как показано в следующем:

Map<World, Integer> votes = new HashMap<>(); 

... 

// Get list of entries and sort descending by value 
List<Entry<World, Integer>> entries = new ArrayList<>(votes.entrySet()); 
Collections.sort(entries, (e1,e2) -> -e1.getValue().compareTo(e2.getValue())); 

// Collect top scoring worlds 
List<World> topWorlds = new ArrayList<>(); 
int highScore = entries.get(0).getValue(); 
for (Entry<World,Integer> e : entries) 
    if (e.getValue() == highScore) 
     topWorlds.add(e.getKey()); 
    else 
     break; 

// Pick one at random 
World pick = topWorlds.get(new Random().nextInt(topWorlds.size())); 

Более старые или новые ГОЛОСУЕМ

Отслеживание временная отметка самого старого или нового голосования для каждого мира также может быть использована для разрыва связей. Например, отслеживание самого старого голосования отдает предпочтение первому голосованию в мире (в наборе связей), в то время как самый новый голос отдает предпочтение последнему миру, на который проголосовали. Я не уверен, что это практично, и упомянуть об этом только как упражнение.