我最近學會了如何將整數數組按升序排序。我正在嘗試編寫一個遊戲,其中一部分涉及創建分層紋理渲染器;然而,當兩個對象完全相同時(y位置相同),其中一個由於排序過程而消失。當數組排序後,項目消失
這是爲什麼?這裏是我的代碼:
我最近學會了如何將整數數組按升序排序。我正在嘗試編寫一個遊戲,其中一部分涉及創建分層紋理渲染器;然而,當兩個對象完全相同時(y位置相同),其中一個由於排序過程而消失。當數組排序後,項目消失
這是爲什麼?這裏是我的代碼:
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
。因此只有最後一個匹配的索引被記錄。
如果給定ypos
值v
有m
指數與ypos[k] == v
,你寫的這些最大的指數m
次finalOrder
,其餘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++;
}
這適用於分秒,然後該角色再次消失,謝謝嘗試,雖然 –
啊,杜。當匹配的'ypos'被找到時,我的大腦在內部循環中插入了一個'break;'。你沒有。 –
現在另一個物體已經不可見,它曾經是第一個繪製的物體,現在它是第二個繪製的物體 ??? –
排序的算法非常好記錄,什麼語言你使用什麼數據結構? – user1929959
更好的是在你的問題中編輯這段代碼。它在這裏不可讀。 – Smit
我真的認爲你需要解釋更多關於這裏發生的事情。這太複雜了,它實際上聞起來很糟糕...... – thkala