2017-01-14 6 views
1

私は学校の割り当てのために書いているプログラムに問題があります。 基本的には、このコードの前に、私はすでに一連の情報を格納している一連の情報を受け取って動作します。今度は、この配列をソートしなければなりません(ソート後、PRIORITY変数の順にいくつかを計算する必要があります)。変数に基づいてオブジェクト配列を別の配列にソート

私は既にMyClass []配列を持っています。これは、MyClassオブジェクトの限られた量を格納しています。

MyClass[] priorityArray = new MyClass[input.length]; 
for (int i=0; i<priorityArray.length; i++) { 
    int maxIndex = 0; 
    int maxPrivilege = input[i].returnPrivilege(); 
    for (int j=1; j<input.legnth; j++) { 
    int currentPrivilege = input[j].returnPrivilege(); 
    if (currentPrivilege > maxPrivilege) { 
     maxPrivilege = currentPrivilege; 
     maxIndex = j; 
    } 
    } 
    priorityArray[i] = input[maxIndex]; 
    input[maxIndex].setPrivilege(-900000000); 


} 

のMyClassクラス空想何もあれば、もちろん、適切なコンストラクタ、ゲッターとセッターメソッドおよび整数変数「特権」が含まれています。

プログラムの最終テストでエラーが発生し、プログラムが "-900000000"という特権を返すので、コードのこの部分と関係があります。 入力配列から特定のMyClassインスタンスを優先配列配列に書き込んでいないこともあります。

どうすればこの問題を解決できますか?助けて。

答えて

1

私は答えを完全に書き直します。

この行に

priorityArray[i] = input[maxIndex]; 

あなたが参照によりつのアレイから別のアレイにオブジェクトを割り当てます。つまり、オブジェクトが1つだけで、次の行に-9000000という値を設定します。もちろん、priorityArrayの要素にも同じ変更があります。これを修正するには、オブジェクトをここで複製する必要があります。

+0

私は理解できません - 毎回 "j" forループが "input"配列全体を通過したいと思っています。したがって、forループは0で開始しなければなりません(私は1から始まります。なぜなら、宣言時に入力[0] .returnPrivilege()の値をmaxPrivilege変数に代入するからです。デバッガ "? –

+0

ありがとうそれは私の問題を解決しました。残念ながら、私はまだ100%プロジェクトで行われていないが、優先順位は今正しく表示されています。 –

関連する問題