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