我需要将数组元素向左循环移位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
中的所有数字复制到数组的末尾。