2017-02-10 13 views
-5

Привет я пытаюсь создать и отформатировать этот массив:Массив метод форматирования

Person[] persons = { person1, person2, person3, person4, person5, person6, person7, person8, person9, person10 }; 
// The aim is to form an array of the 5 strongest people's indices above 
int[] arrayOfStrongestPeopleIndices = new int[5]; 
for (int index = 0; index < 10; index++){ 
    int strength = persons[index].strength; 

    for (int str : arrayOfStrongestPeopleIndices){ 

     //something @ here ? 

    } 
} 

Так что я пытаюсь Переберите 10 человек, а массив arrayOfStrongestPeopleIndices должен быть 5 индекса самых сильных людей (в порядок сильного до самого слабого, т.е. array[0] является индекс сильнейших человека из 5, и array[4] является самым слабым из 5)

Вопрос: Как вернуть arrayOfStrongestPeopleIndices отформатированные как указано?

+0

, пожалуйста, напишите исполняемый код, потому что размер массива лиц мы не можем догадаться. – RamPrakash

+0

у вас даже есть вопрос к этому сообщению? –

+0

Отредактировано основное сообщение, должно быть проще читать сейчас –

ответ

0

Так что это моя идея, попробовал, и он должен работать. Когда я нахожу человека, который сильнее любого в «сильнейшем» ArrayList, я перемещаю все элементы, которые появляются после него на одно место.

ArrayList<int> strongest = new ArrayList<int>(); 
strongest.append(-1, -1, -1, -1, -1); 
for (int i = 0; i < 500; i++) { 
    int str = persons[i].strength; 
    for(int j = 0; j < 5; j++) { 
     if(str > strongest[j]) { 
      int temp = strongest[j]; 
      strongest[j] = str; 
      str = temp; 
     } 
    } 
} 
0

https://docs.oracle.com/javase/8/docs/api/java/util/List.html#sort-java.util.Comparator-

List<Person> p = Arrays.asList(person); 

Collections.sort(p, new Comparator<Person>() { 
    @Override 
    public int compare(Person a1, Persona2) { 
     return a1.strenght.compareTo(a2.strenght); //im assuming strenght is a number 
    } 
}); 

person = p.toArray(new Person[0]); 

теперь у вас есть упорядоченный массив человека от слабых к сильным

+0

Спасибо, не знал о таком инструменте, заключается в том, что количество людей, которых я прокручиваю (50 в настоящее время не 500), вызывает массовую задержку при выполнении или является ли этот инструмент медленнее? –

0

Это метод, который возвращает массив целых чисел, которые представляют собой показатели самых сильных людей.

public int[] findStrongestIndices(Person[] persons) { 
    int[] arrayOfStrongestPeopleIndices = new int[5]; 

    for (int i = 0; i < 5; i++) { 
     int temp = 0; 
     for (int j = 0; j < 10; j++) { 
      int str = persons[j].strength; 
      if (i == 0) { 
       if (str > temp) 
        temp = str; 
      } 
      else { 
       if (str > temp 
         && str < persons[arrayOfStrongestPeopleIndices[i - 1]].strength) 
        temp = str; 
      } 
     } 

     for (int j = 0; j < persons.length; j++) { 
      if (temp = persons[j].strength) 
       arrayOfStrongestPeopleIndices[i] = j; 
       break; 
     } 
    } 
    return arrayOfStrongestPeopleIndices; 
} 

Мне пришлось перестроить код, чтобы идти в ногу с изменениями. Этот метод примет массив «Личность» любой длины и возвращает целочисленный массив длиной 5.