数组中数字的循环移位Java

问题描述

我需要将数组元素向左循环移位 n 个字符。

这是我的代码

    public static void moveLeft(int[] arr,int num) {
    int[] temp = new int[num];

    for (int i = 0; i < num; i++) {
        temp[i] = arr[i];
    }

    for(int i = arr.length - num; i > 0; i++) {
        arr[i-num] = arr[i];
    }

    for (int i = 0; i < num; i++) {
        arr[i] = temp[i];
    }
}

当我运行此代码时,我收到此错误:线程“main”中的异常 java.lang.Arrayindexoutofboundsexception:索引 10 超出长度 10 的边界

解决方法

for( ...; i > 0; i++) 非常可疑,即虽然 i > 0 会递增 i(如果不是从负值开始,i 会递增直到它(悄悄地)溢出或者在其他地方抛出异常)。

{递增++需要上限< value(或<=);递减--一个较低的> value(或>=)}

代码正在访问 arr[i](和 arr[i-num]),所以 arr.length 应该是限制(假设非负 num):i < arr.length
这也是合乎逻辑的选择,因为它应该复制从索引 num 到数组末尾的所有数字。