You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向二维高分数组插入新分数并将其余元素下移至正确位置?

解决二维高分榜数组的插入排序问题

我来帮你搞定这个高分榜的插入问题!咱们的核心目标是把新的[名称,分数]条目插入到highScores数组的正确位置,保持分数从高到低排序,同时让后面的元素依次下移(如果数组已满,最后一个低分条目会被挤出)。下面是具体的思路和代码实现:

核心思路

  1. 定位插入位置:遍历数组,找到第一个分数低于新分数的索引位置;如果新分数是最低的,就插在数组末尾。
  2. 元素后移腾位:从数组最后一位开始往前遍历,把插入位置之后的元素依次向后移动一位,避免覆盖数据。
  3. 插入新条目:把新的名称和分数放到腾出的位置上。

代码示例(以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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:32:30