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