Помогите Топ игроков (по счету) в GUI.

  • Автор темы Автор темы iD3LSY
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

iD3LSY

Активный участник
Пользователь
Баллы
76
Здравствуйте, давно я тут не был, однако перейдём к проблеме.

Мы имеем конфигурационный файл(конфиг), в нем есть список игроков и их счет.
Код:
players:
    udq: 135163
    notch: 1261
    huahwi: 1893
    russianpvp: 81934
Так, нам нужно отсортировать всех этих игроков, чтобы в GUI выставить например 9 наивысших счетов, среди игроков. Т.е. нужно лучшие 9 счетов из players взять в GUI в виде головы со скином игрока. Эту сортировку я засунул в application, и получил
Java:
public static void main(String args[]) {
    int i;
    int large[] = new int[9];
    List<Integer> list = Arrays.asList(1,2,3,4,5);
    int array[] = new int[list.toArray(new Integer[0]).length];
    for(int j = 0; j < list.toArray(new Integer[0]).length; j++)
        array[j] = list.toArray(new Integer[0])[j].intValue();
    int max = 0, index;
    for (int j = 0; j < 9; j++) {
        max = array[0];
        index = 0;
        for (i = 1; i < array.length; i++) {
            if (max < array[i]) {
                max = array[i];
                index = i;
            }
        }
        large[j] = max;
        array[index] = Integer.MIN_VALUE;
        if(large[j] > 0) System.out.println("Самое больше " + Integer.valueOf(j+1) +  "-е число: " + large[j]);
    }
}

Проблема в том, что при таком коде, я не смогу получить ники игроков, обладающих этим высшим(1-9) счетом. И отсортировать тоже не получается. Перевести лист в массив у меня получилось, но нам нужно запихнуть в лист числа из конфига. Не знаю почему, но когда я это делаю, то они просто не сортируются. Все числа, которые я взял из конфига стали топ-1.

Если я буду писать число не из конфига, а вручную (как в том коде (1,2,3,4,5)), то все нормально.
 
Последнее редактирование:
****ь ты говно кодер, иди java учи....
Мои глаза....
 
Почитай про компараторы в Java
 
****ь ты говно кодер, иди java учи....
Мои глаза....
Что твои глаза? Смысл ты сюда пишешь, если твой мозг настолько крошечный, что ты даже написать грамотно не можешь? Почему ты вообще "java" на английском пишешь? Все на русском, а "java" на английском? Найс. Еще вопрос, зачем ты написал про глаза с новой строки?! Почему троеточие ты написал из 4-х точек?

Неужто ты реально настолько убогий, как личность?
 
Java:
public static LinkedHashMap<String, Integer> getTopPlayers(Map<String, Integer> map, int amount)
{
   LinkedHashMap<String, Integer> result = new LinkedHashMap<>();
   Comparator<? super Map.Entry<String, Integer>> comparator = (e1, e2) -> -e1.getValue().compareTo(e2.getValue());
   map.entrySet().stream().sorted(comparator).limit(amount).forEach(e -> result.put(e.getKey(), e.getValue()));
   return result;
}
Насчёт чтения чисел из конфига:
Узнать все ключи (в данном случае это будут ники игроков) в секции конфига можно через ConfigurationSection.getKeys(false), а дальше остаётся только получить по ним значения.
 
Java:
public static LinkedHashMap<String, Integer> getTopPlayers(Map<String, Integer> map, int amount)
{
   LinkedHashMap<String, Integer> result = new LinkedHashMap<>();
   Comparator<? super Map.Entry<String, Integer>> comparator = (e1, e2) -> -e1.getValue().compareTo(e2.getValue());
   map.entrySet().stream().sorted(comparator).limit(amount).forEach(e -> result.put(e.getKey(), e.getValue()));
   return result;
}
Насчёт чтения чисел из конфига:
Узнать все ключи (в данном случае это будут ники игроков) в секции конфига можно через ConfigurationSection.getKeys(false), а дальше остаётся только получить по ним значения.
Тема закрывается. Спасибо, gamerforEa <3
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх