2016-11-05 3 views
0

Мне нужно адаптировать выбор для школы. Цель состоит в том, чтобы вернуть ранжирование игроков с победителями, пришедшими на первое место, и т. Д. Игроки с равным рейтингом должны быть указаны в том же порядке, что и в списке турниров.Сортировка сортировки с arraylists?

public ArrayList<Player> ranking() { 
    ArrayList<Player> result = new ArrayList<Player>(); 
    // Supply this code! 
    return result; 

Теперь Heres моя попытка адаптировать выбор рода

int smallInt = 0; 
    int j=0; 
    int smallIntIndex = 0;  

    for(int i=1;i<players.size();i++){ 
     smallInt = result.get(i-1).totalScore(); 
     smallIntIndex = i-1; 
     for(j=i;j<players.size();j++){ 
      if(result.get(j).totalScore()<smallInt){ 
       smallInt = result.get(j).totalScore(); 
       smallIntIndex = j;      
      } 
     } 
     int temp = result.get(smallIntIndex).totalScore(); 
     result.set(smallIntIndex, result.get(i-1)); 
     result.set(i-1, temp); 
    } 
    return result; 

И единственная линия, которая дает мне ошибку в самый последний

result.set(i-1, temp); //The method set(int, Player) in the type 
         //ArrayList<Player> is not applicable for the arguments (int, int) 

Любая идея, что я делаю не так? Является ли большая часть адаптации правильной? ЛЮБАЯ ПОМОЩЬ ОЦЕНКА. Thanks

p.s. пожалуйста, не предлагайте компараторов или подобных вещей, это не то, что я ищу.

+1

ошибка говорит, что все это на самом деле. Измените переменную 'temp' на тип' Player' вместо 'int'. –

+0

Внешний цикл должен начинаться с индекса '0', ** NOT **' 1' и должен заканчиваться на 'players.size() - 1', внутренний цикл должен начинаться с индекса' i + 1'. https://en.wikipedia.org/wiki/Selection_sort#Implementation –

ответ

1

Пар вещей:

  • вы инициализация пустого result массива, но алгоритм работает на существующих массивах путем замены элементов. Вы должны инициализировать result со значениями players

    List<Player> result = new ArrayList<Player>(players); 
    
  • переменной temp должен быть типа Player вместо int

    Player temp = result.get(smallIntIndex); 
    
  • внешнего цикла должна начинаться с индекса 0, не1

  • внешний контур должен заканчиваться players.size() - 1
  • внутренний цикл должен начинаться с индекса i+1
  • нужно поменять местами элементы каждый раз, когда во внешнем контуре, это не правильно.Только поменять их, когда новый минимум найден

исправленный код:

public ArrayList<Player> ranking() { 
    List<Player> result = new ArrayList<Player>(players); 
    int smallInt = 0; 
    int j=0; 
    int smallIntIndex = 0;  

    for(int i=0;i<result.size() - 1;i++){ 
     smallInt = result.get(i).totalScore(); 
     smallIntIndex = i; 
     for(j=i+1;j<result.size();j++){ 
      if(result.get(j).totalScore()<smallInt){ 
       smallInt = result.get(j).totalScore(); 
       smallIntIndex = j;      
      } 
     } 

     if (i != smallIntIndex) { 
      Player temp = result.get(smallIntIndex); 
      result.set(smallIntIndex, result.get(i)); 
      result.set(i, temp); 
     } 
    } 
    return result; 
} 

EDIT: Вы спрашиваете, что отсортированные результаты должны перейти в отдельный results массив, который изначально пуст. Вот способ сделать это:

public ArrayList<Player> ranking() { 
    List<Player> result = new ArrayList<Player>(); 
    int smallInt = 0; 
    int j=0; 
    int smallIntIndex = 0;  

    for(int i=0;i<players.size() - 1;i++){ 
     smallInt = players.get(i).totalScore(); 
     smallIntIndex = i; 
     for(j=i+1;j<players.size();j++){ 
      if(players.get(j).totalScore()<smallInt){ 
       smallInt = players.get(j).totalScore(); 
       smallIntIndex = j;      
      } 
     } 

     if (i != smallIntIndex) { 
      Player player = players.get(smallIntIndex); 

      result.add(player); 
      players.set(smallIntIndex, players.get(i)); 
     } 
    } 
    return result; 
} 

Ссылка: Wikipedia's article on selection sort

+0

Хм. 'result' создается только при вызове метода, значит ли это, что он содержит те же значения, что и« игроки »ArrayList, которые затем сортируются? Если значения вставляются в 'result', или, может быть, строки типа' if (result.get (j) .totalScore()

+0

Я боюсь, что на самом деле их не сортировать. он просто возвращал те же значения в том же порядке, в каком они были введены. Но это не дает мне ошибку компиляции, так что это хорошо. –

+0

Ой, подождите, как вы их показываете? Im использует 'System.out.println (T.ranking());' и выводит '[]'? Как правильно отобразить его? –

0

Если изменить

Int Temp = result.get (smallIntIndex) .totalScore();

к

Температура Игрок = result.get (smallIntIndex);

программа будет компилироваться.

Исходный код пытается вставить PersonstotalScore в список, а не Person.

Смежные вопросы