2017-01-14 7 views
-1

私のプログラムの次は、オブジェクトの配列を受け取って、特権変数のサイズに基づいてソートする必要があります。 "arrayFromBefore"変数は、タイプMyClassのオブジェクトで埋められます。基本的には、新しいMyClassオブジェクトを作成し、それをオブジェクトの同じ属性で返します。プルーニング/マイグレーション中に配列内のオブジェクトの重複を検出する問題

特定のケースでは、同じMyClassオブジェクトが優先順位配列に複数存在するように見えることがあります。これらの重複もあり、常に同じ倍数ではない(例えば、1つのオブジェクトは、行に3回発生し、行内の他の5回、別の二回、等...)

MyClass[] priorityArray = new MyClass[arrayFromBefore.length]; 

for (int i = 0; i < priorityArray.length; i++) { 
    int maxIndex = 0; 
    int maxPrivilege = arrayFromBefore[i].returnPrivilege(); 
    for (int j = 1; j < arrayFromBefore.length; j++) { 
    int currentPrivilege = arrayFromBefore[j].returnPrivilege(); 
    if (currentPrivilege > maxPrivilege) { 
     maxPrivilege = currentPrivilege; 
     maxIndex = j; 
    } 
    } 
    MyClass mostPrivilaged = arrayFromBefore[maxIndex]; 
    priorityArray[i] = mostPrivileged; 
    arrayFromBefore[maxIndex].setPriority(-900000000); 
} 
+0

だから、彼らは繰り返します、そして、それはあなたの結果にどのように影響しますか?あなたは詳しく説明できますか?ありがとうございました –

+0

実際に作業コードを入れてコンパイルしてから、ここにダンプしてエラーを捕捉して減らして、誤って間違った時間を無駄にしないようにしましょう。 「myClass」を1行に入力してコンパイルしないので、これはやっていないことは明らかです。あなたはまた長さも綴りましたが、私もそれを固定しました。 – clearlight

答えて

1

問題があなたの内for-loopどこにありますそれぞれiの場合、jは同じ値1から始まります。 jは、同じオブジェクトを上書きすることができないように、iの次から正確に開始する必要があります。

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

// priorityArray[i] = mostPrivileged; this line can be removed as it isn't required because you are getting sorted arrayFromBefore. 

myClass mostPrivilaged = arrayFromBefore[maxIndex]; // Swapping of   
arrayFromBefore[maxIndex] = arrayFromBefore[i];  // largest priority object 
arrayFromBefore[i] = mostPrivilaged;     // with its required position in sorted array. 

} 

この後、arrayFromBeforeが優先順位の降順で短絡されます。

関連する問題