2017-02-10 6 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にあるものよりも強い人物を見つけたら、それを後にくるすべての要素を1つの場所に移動します。

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

ありがとう、そのようなツールを知らなかったのですが、私がループしている人の数(現在500人ではない50人)が実行時に大規模な遅延を引き起こしているのですか、それともこのツールが遅いのですか? –

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の整数配列を返します。

関連する問題