数组中数字的循环移位(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];
}
}

当我运行此代码时,我会得到以下错误:线程中的异常";主";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中的所有数字复制到数组的末尾。

最新更新