2017-01-14 43 views
-1

我的程序的以下內容應該接收一個對象數組並根據它們的變量特權的大小對它們進行排序。 「arrayFromBefore」變量填充了MyClass類型的對象。它基本上創建了一個新的MyClass對象,並使用該對象的相同屬性返回它。在修剪/遷移過程中檢測陣列中對象重複的問題

問題是,在某些情況下,優先級數組中似乎有幾個相同的MyClass對象出現。這些重複也並不總是相同的多個(例如,一個對象連續出現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',並且不能編譯。你也把長度拼寫成lentgh,我也是這樣寫的。 – 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按照優先級從高到低的順序縮短。