2012-12-31 92 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

现在另一个物体已经不可见,它曾经是第一个绘制的物体,现在它是第二个绘制的物体 ??? –