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