如何将数组中的所有值向右移动并插入新的第一个值?

时间:2017-05-20 08:11:14

标签: java arrays

这是我到目前为止的代码

for (int i = 0; i < (arr.length - 1); i++) {
    arr[i+1] = arr[i];
}

arr[0] = newNum;

我遇到的问题是此代码将初始第一个值arr[0]复制到数组中的每个其他插槽。

例如,[2, 7, 5, 3],并插入新的数字6,将输出[6, 2, 2, 2]

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

问题是你的循环从左到右。通过向右移动,然后向右移动,您将在数组中传播第一个值。

说清单是[1,4,2,5]。然后第一次迭代将导致:

   [1,4,2,5]
-> [1,1,2,5]

下一个i = 1,因此:

   [1,1,2,5]
-> [1,1,1,5]

最后如果是i = 2,那么:

   [1,1,1,5]
-> [1,1,1,1]

您可以通过迭代从右到左

来解决问题
for (int i = arr.length - 2; i >= 0; i--){ //array works right to left
    arr[i+1] = arr[i];
}   
arr[0] = newNum;

现在变换将发生如下,对于我们的示例,ii = 2开头,所以在第一次迭代之后:

   [1,4,2,5]
-> [1,4,2,2]

现在我们递减i并将a[1]复制到a[2]

   [1,4,2,2] 
-> [1,4,4,2]

最后i = 0我们将a[0]复制到a[1]

   [1,4,4,2]
-> [1,1,4,2]

现在,内容已移至右侧,我们可以将a[0]设置为新值。

答案 1 :(得分:3)

你必须从后面开始并开始:

for (int i = arr.length - 1; i >= 1; i--) {
    arr[i] = arr[i - 1];
}

arr[0] = newNum;

答案 2 :(得分:2)

不要重新发明轮子。 Java附带了一个用于复制数组的静态方法,在这里可以很好地完成。这是System.arraycopy,对于您的情况,您可以这样做。

System.arraycopy(arr, 0, arr, 1, arr.length - 1);
arr[0] = newValue;

System.arraycopy的参数是

  • 您要从
  • 复制的数组
  • 您要复制的第一个元素的位置
  • 您要复制到的阵列 - 并且可以将此格式设置为与您从
  • 复制的阵列相同
  • 您要复制的第一个元素的目标位置
  • 您要复制的元素数量。