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

Java数组右移指定位数并左侧补0的代码问题排查

问题分析

你的代码核心移位逻辑在places为小于数组长度的正整数时是可以正常运行的,遗漏了以下边界处理逻辑:

  • 边界判断错误:places == 0时不需要做任何移位操作,应该直接返回原数组,而非返回null;未校验places的合法性,传入负数会直接触发索引越界异常。
  • 未处理places >= 数组长度的场景:当移位位数大于等于数组长度时,所有原有元素都会被移出数组,最终数组应该全部置0,你的代码此时循环起始值为负数,不会执行循环,数组不会有任何修改,不符合预期。
  • 未兼容空数组:如果传入长度为0的数组,你的代码会触发索引越界。

修正后的实现

import java.util.Arrays;

public static int[] shiftWithDrop(int[] array, int places) {
    // 参数合法性校验
    if (array == null || array.length == 0 || places <= 0) {
        return array;
    }
    // 移位长度超过等于数组长度时直接全置0
    if (places >= array.length) {
        Arrays.fill(array, 0);
        return array;
    }
    // 从后往前移动元素,避免覆盖未处理的原始值
    for (int i = array.length - 1; i >= places; i--) {
        array[i] = array[i - places];
    }
    // 左侧空出位置统一置0
    Arrays.fill(array, 0, places, 0);
    return array;
}

如果你不需要修改原数组,可以在方法开头先拷贝一份新数组,后续所有操作都在新数组上执行即可。

内容的提问来源于stack exchange,提问作者maxig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:45:09