数组中数字的循环移位 (Java)

Cyclic shift of numbers in an array (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++) 非常可疑,即 while i > 0 do increment i (如果不是以负值开始, i 将递增直到它(静默) 溢出或在其他地方抛出异常。

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

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