首页 > 解决方案 > 数组中数字的循环移位(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 的范围

标签: javaarraysindexoutofboundsexceptionshift

解决方案


for( ...; i > 0; i++)是非常可疑的,也就是说,虽然i > 0做增量i(如果不是从负值开始,i将增加直到它(无声地)溢出或在其他地方抛出异常)。

{递增++需要一个上限< value(或<=);递减--一个较低的> value(或>=)}

代码正在访问arr[i](and arr[i-num]),因此arr.length应该是限制(假设非负数num):i < arr.length
它也是逻辑选择,因为它应该将所有数字从索引复制num到数组的末尾。


推荐阅读