如何向二维高分数组插入新分数并将其余元素下移至正确位置?
解决二维高分榜数组的插入排序问题
我来帮你搞定这个高分榜的插入问题!咱们的核心目标是把新的[名称,分数]条目插入到highScores数组的正确位置,保持分数从高到低排序,同时让后面的元素依次下移(如果数组已满,最后一个低分条目会被挤出)。下面是具体的思路和代码实现:
核心思路
- 定位插入位置:遍历数组,找到第一个分数低于新分数的索引位置;如果新分数是最低的,就插在数组末尾。
- 元素后移腾位:从数组最后一位开始往前遍历,把插入位置之后的元素依次向后移动一位,避免覆盖数据。
- 插入新条目:把新的名称和分数放到腾出的位置上。
代码示例(以Java为例,适配Android场景)
假设你的highScores是一个9行2列的二维数组,第一列存名称,第二列存分数(这里用字符串存储,你也可以改成int类型):
// 初始化高分榜数组(示例数据,包含空占位) String[][] highScores = { {"Alice", "950"}, {"Bob", "900"}, {"Charlie", "800"}, {"", ""}, {"", ""}, {"", ""}, {"", ""}, {"", ""}, {"", ""} }; // 待插入的新分数条目 String newPlayerName = "Dave"; int newPlayerScore = 850; String newScoreStr = String.valueOf(newPlayerScore); // 默认插入到数组末尾 int insertIndex = highScores.length; // 第一步:找到正确的插入位置 for (int i = 0; i < highScores.length; i++) { // 遇到空条目,直接插在这里(说明前面都是有效高分,后面为空) if (highScores[i][1].isEmpty()) { insertIndex = i; break; } // 转换为int比较分数大小 int currentScore = Integer.parseInt(highScores[i][1]); if (currentScore < newPlayerScore) { insertIndex = i; break; } } // 第二步:从后往前移动元素,腾出插入位置 if (insertIndex < highScores.length - 1) { for (int i = highScores.length - 1; i > insertIndex; i--) { highScores[i][0] = highScores[i-1][0]; highScores[i][1] = highScores[i-1][1]; } } // 第三步:插入新的高分条目 highScores[insertIndex][0] = newPlayerName; highScores[insertIndex][1] = newScoreStr; // 打印验证结果 for (String[] entry : highScores) { System.out.println(entry[0] + ": " + entry[1]); }
关键细节说明
- 空条目处理:如果数组还没填满,遇到第一个空位置就直接插入,避免无效遍历。
- 元素移动顺序:必须从数组末尾往前移动,否则会出现前面的元素覆盖后面元素的问题。
- 类型适配:如果你的分数是用
int类型存储的,直接去掉Integer.parseInt和String.valueOf的转换步骤即可。 - 边界情况:
- 新分数是最高分:插入到数组头部,所有元素后移。
- 新分数是最低分:插入到数组末尾(或替换最后一个条目,如果数组已满)。
内容的提问来源于stack exchange,提问作者Android 7
相关产品推荐
相关产品推荐

