数组排序时,项目消失

时间:2012-12-31 18:51:31

标签: java arrays sorting

我最近学会了如何按整数排序整数数组。我正在尝试编写一个游戏,其中一部分涉及创建一个分层纹理渲染器;但是,当两个对象完全相同时(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++;
    }
} 

1 个答案:

答案 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。因此,只记录最后一个匹配的索引。

如果对于给定的yposvm索引为ypos[k] == v,则将这些索引中最大的m次写入{{1}其余的finalOrder索引总是被覆盖。因此,相应的对象不会记录在m-1

要解决此问题,请在找到匹配项时递增finalOrder索引,并且j的下一个元素等于当前值。

order