我最近学会了如何按整数排序整数数组。我正在尝试编写一个游戏,其中一部分涉及创建一个分层纹理渲染器;但是,当两个对象完全相同时(y位置相同),其中一个因排序过程而消失。
这是为什么?这是我的代码:
public void sort() {
int i = 0;
while (i < yposCount) {
order[i] = ypos[i];
i++;
}
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++;
}
}
答案 0 :(得分: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;
,所以总是在索引处写入与k
数组匹配的每个索引finalOrder
j
。因此,只记录最后一个匹配的索引。
如果对于给定的ypos
值v
,m
索引为ypos[k] == v
,则将这些索引中最大的m
次写入{{1}其余的finalOrder
索引总是被覆盖。因此,相应的对象不会记录在m-1
。
要解决此问题,请在找到匹配项时递增finalOrder
索引,并且j
的下一个元素等于当前值。
order