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

Java使用数组反转实现坐标前置移位输出不全问题排查

问题根源

你写的反转版本addCoordinateRowFront存在三个核心问题:

  • 你创建的newArray是方法内部的局部变量,方法执行完成后就会被销毁,完全没有同步修改类实例持有的newCoordinateArray数组,所有反转操作相当于白做
  • 完全没有处理当前数组中已经存在的旧元素:要把新行插到头部,需要先把旧元素整体向后移动,给新行腾出头部的空间,否则旧元素会被覆盖
  • 没有更新numberOfElements计数,打印时只会按原有计数输出旧元素,自然看不到新增的坐标

修正后的数组反转方案实现

这里采用三次反转的高效实现,不需要逐位挪元素,逻辑如下:

void addCoordinateRowFront(CoordinateRow rowOfCoordinates) {
    int addLen = rowOfCoordinates.numberOfElements;
    int totalLen = addLen + numberOfElements;
    // 边界判断,避免超过数组最大容量
    if (totalLen > MAX_NUMBER_OF_ELEMENTS) {
        throw new RuntimeException("坐标数量超过最大限制250");
    }

    // 第一步:先把要新增的行追加到当前数组末尾
    for (int i = 0; i < addLen; i++) {
        newCoordinateArray[numberOfElements + i] = rowOfCoordinates.newCoordinateArray[i];
    }

    // 第二步:反转原有旧元素部分(前numberOfElements个元素)
    reverse(0, numberOfElements - 1);
    // 第三步:反转新增的元素部分(后addLen个元素)
    reverse(numberOfElements, totalLen - 1);
    // 第四步:反转整个数组,完成前置插入
    reverse(0, totalLen - 1);

    // 更新元素计数
    numberOfElements = totalLen;
}

// 辅助方法:反转数组从start到end区间的元素
void reverse(int start, int end) {
    while (start < end) {
        Coordinate temp = newCoordinateArray[start];
        newCoordinateArray[start] = newCoordinateArray[end];
        newCoordinateArray[end] = temp;
        start++;
        end--;
    }
}

如果你不需要三次反转的高效实现,只是想把你之前写的反转逻辑改对,也可以用下面的实现:

void addCoordinateRowFront(CoordinateRow rowOfCoordinates) {
    int addLen = rowOfCoordinates.numberOfElements;
    int totalLen = addLen + numberOfElements;
    if (totalLen > MAX_NUMBER_OF_ELEMENTS) {
        throw new RuntimeException("坐标数量超过最大限制250");
    }

    // 把原有元素整体后移addLen位,腾出头部空间
    for (int i = numberOfElements - 1; i >= 0; i--) {
        newCoordinateArray[i + addLen] = newCoordinateArray[i];
    }

    // 把要新增的行按顺序放到头部
    // 如果你确实需要反转新增行的顺序,就把这里的rowOfCoordinates换成你反转后的数组
    for (int i = 0; i < addLen; i++) {
        newCoordinateArray[i] = rowOfCoordinates.newCoordinateArray[i];
    }

    numberOfElements = totalLen;
}

内容的提问来源于stack exchange,提问作者Weightlifting Without Limits

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:24:11