2013-10-28 4 views
-1

Я работаю над плагином Minecraft Bukkit для своего сервера. Часть моего плагина требует от пользователей проголосовать за карту. Когда они используют команду голосования (например, /vote <mapnumber>), их голос хранится в HashMap (String Playername, Integer mapnumber). Это означает, что пользователь уже голосовал или хочет проголосовать за новую карту.Найти наиболее распространенное значение в HashMap

Затем я использую цикл for для вставки голосов в новый HashMap (Integer Mapnumber, Integer Numberofvotes). Вот где я в тупике.

Я ищу способ выяснить, какой Mapnumber имеет большинство заметок.

+2

Ну, забыть о том, что это на самом деле карта - у вас есть набор пар ключ/значение, и вы хотите узнать, какой ключ имеет наибольшее значение. Так подумайте, как вы можете это сделать, повторяя последовательность и помня «лучшее, что вы видели до сих пор» ... –

+1

Возможный дубликат [Поиск ключа, связанного с максимальным значением в карте Java] (http: // stackoverflow. com/questions/5911174/find-key-associated-with-max-value-in-a-java-map) –

ответ

0

После построения hashmap вы можете построить другой, где ключ будет номером карты, а значение может быть частотой. Тогда все, что нужно сделать, это найти максимальную частоту.

HashMap<Integer,Integer> freq_map = new HashMap<Integer,Integer>(); 

int map_no=0,fr; 
Iterator it = map.entrySet().iterator(); 
while (it.hasNext()) { 
    Map.Entry pairs = (Map.Entry)it.next(); 
    map_no = pairs.getValue()); 
    if(map.contains(map_no)) fr = freq_map.get(map_no); 
    else fr = 0; 

    fr ++; 
    freq_map.put(map_no,fr); 
} 

// to find max 

int max = -1,temp; 
int result = -1; 
Iterator it = freq_map.entrySet().iterator(); 
while (it.hasNext()) { 
    Map.Entry pairs = (Map.Entry)it.next(); 
    temp = pairs.getValue()); 

    if(temp>max){ 
     max = temp; 
     result = pairs.getKey(); 
    } 
} 

System.out.println("Highest frequency = "+result);   
+0

Вы должны взглянуть на [Соглашения о присвоении имен Java] (http://www.oracle.com/ technetwork/Java/codeconv-138413.html). – sp00m

0

Попробуйте, это даст вам наибольшее количество голосов:

int maxNumberofVotes=(Collections.max(map.values())); 
Смежные вопросы