java - 数组中数字的循环移位(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++)
是非常可疑的,也就是说,虽然i > 0
做增量i
(如果不是从负值开始,i
将增加直到它(无声地)溢出或在其他地方抛出异常)。
{递增++
需要一个上限< value
(或<=
);递减--
一个较低的> value
(或>=
)}
代码正在访问arr[i]
(and arr[i-num]
),因此arr.length
应该是限制(假设非负数num
):i < arr.length
它也是逻辑选择,因为它应该将所有数字从索引复制num
到数组的末尾。
推荐阅读
- html - 我正在尝试为新闻与其类别之间的模型建立关系
- python - 需要帮助找出 for 循环中的逻辑
- java - 画布撤消操作不起作用 - 如何?
- php - 无法下载文件 Symfony 3.4 和 VueJS
- java - Java LinkedList迭代器:删除当前元素及其之后的所有元素
- android - 如何缩放位图以支持画布中的多屏?
- laravel - Laravel 遍历所有模型
- python - 在拆分数据集时,人们为什么要遵循命名约定?
- class - Haskell 声明 Show 类的一个实例
- android - 如何在recyclerview的项目内放置视图的onClickListeners?