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
相关产品推荐
相关产品推荐

