2012-12-31 30 views
1

我最近學會了如何將整數數組按升序排序。我正在嘗試編寫一個遊戲,其中一部分涉及創建分層紋理渲染器;然而,當兩個對象完全相同時(y位置相同),其中一個由於排序過程而消失。當數組排序後,項目消失

這是爲什麼?這裏是我的代碼:

+0

排序的算法非常好記錄,什麼語言你使用什麼數據結構? – user1929959

+1

更好的是在你的問題中編輯這段代碼。它在這裏不可讀。 – Smit

+1

我真的認爲你需要解釋更多關於這裏發生的事情。這太複雜了,它實際上聞起來很糟糕...... – thkala

回答

3
Arrays.sort(order); 
int j = 0; 
while (j < yposCount) { 
    int k = 0; 
    while (k < yposCount) { 
     if (order[j] == ypos[k]) { 
      finalOrder[j] = k; 
     } 
     k++; 
    } 
    j++; 
} 

對於每個ypos價值,因爲你不知道你break;後發現一個匹配,你老是寫每一個索引j匹配的finalOrder數組索引k。因此只有最後一個匹配的索引被記錄。

如果給定yposvm指數與ypos[k] == v,你寫的這些最大的指數mfinalOrder,其餘m-1指數始終覆蓋。因此相應的對象不記錄在finalOrder中。

要解決該問題,請在找到匹配項時增加j索引,並且order的下一個元素等於當前值。

Arrays.sort(order); 
int j = 0; 
while (j < yposCount) { 
    int k = 0; 
    while (k < yposCount) { 
     if (order[j] == ypos[k]) { 
      finalOrder[j] = k; 
      // Now, if the next `order` is equal, continue looking for that value 
      if ((j+1 < yposCount) && (order[j+1] == order[j])) { 
       // more of the same ypos values to come 
       j++; 
      } else { 
       // All these ypos values found, end inner loop 
       break; 
      } 
     } 
     k++; 
    } 
    j++; 
} 
+0

這適用於分秒,然後該角色再次消失,謝謝嘗試,雖然 –

+0

啊,杜。當匹配的'ypos'被找到時,我的大腦在內部循環中插入了一個'break;'。你沒有。 –

+0

現在另一個物體已經不可見,它曾經是第一個繪製的物體,現在它是第二個繪製的物體 ??? –