2017-02-10 173 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; 
} 

我不得不检修代码以跟上编辑。此方法将接受任意长度的“Person”数组并返回长度为5的整数数组。