【问题标题】:Cyclic shift of numbers in an array (Java)数组中数字的循环移位(Java)
【发布时间】:2021-05-24 20:31:54
【问题描述】:

我需要将数组元素循环左移 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 的范围

【问题讨论】:

  • 您的第二个循环在 i &gt; 0 时运行,并以 i++ 作为更新。其中一个是错误的。

标签: java arrays indexoutofboundsexception shift


【解决方案1】:

for( ...; i &gt; 0; i++) 非常可疑,也就是说,i &gt; 0 增加 i(如果不是从负值开始,i 将增加直到它(静默)溢出或在其他地方抛出异常) .

{递增++ 需要上限&lt; value(或&lt;=);将-- 递减一个较低的&gt; value(或&gt;=)}

代码正在访问arr[i](和arr[i-num]),所以arr.length应该是限制(假设非负num):i &lt; arr.length
这也是一个合乎逻辑的选择,因为它应该从索引num 复制所有数字直到数组的末尾。

【讨论】:

  • 你能做一个固定的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 1970-01-01
  • 2011-04-24
  • 2021-12-11
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
相关资源
最近更新 更多