Java实现数组指定位置拆分后前半部分移至末尾的错误排查
代码执行流程分析
你编写的代码当前仅实现了将数组第一个元素移动到末尾的逻辑,完整执行流程如下:
- 初始化数组
int a[]= {12,10,5,6,52,36},数组长度n=6,变量x存储数组第一个元素的值12 - 执行内层for循环(i从0到4):
循环内逻辑实际是将数组所有元素依次向前挪一位,你写的第二行temp=a[i];属于冗余代码,定义的temp变量全程没有参与有效赋值,循环结束后数组变为{10,5,6,52,36,36} - 执行
a[n-1]=x,将数组最后一位赋值为x存储的12,最终数组变为{10,5,6,52,36,12},和你得到的输出一致。
代码存在的问题
- 没有控制移动次数的外层逻辑:你现在只执行了1次元素前移操作,仅能移动1个元素到末尾,要移动k个元素就需要把整套前移逻辑执行k次
- 冗余代码:循环内的第二行
temp=a[i];没有任何作用,属于无效代码 - 没有抽象出k变量:现在写死了仅处理第一个元素,无法适配不同的拆分位置需求
修正后的实现
按照你现有的逻辑调整,只需要在外层加k次循环即可适配需求:
public class Split_array_add_first_part_to_the_end { public static void main(String[] args) { int a[]= {12,10,5,6,52,36}; int k = 2; // 拆分位置 int n = a.length; // 处理k大于数组长度的情况,避免无效循环 k = k % n; // 外层循环执行k次,每次移动一个元素到末尾 for (int j = 0; j < k; j++) { int x = a[0]; for (int i = 0; i < n-1; i++) { a[i] = a[i+1]; } a[n-1] = x; } // 输出结果 for(int i=0;i<n;++i) { System.out.println(a[i]); } } }
运行后即可得到预期输出{5,6,52,36,12,10}。
内容的提问来源于stack exchange,提问作者Ksha
相关产品推荐
相关产品推荐

