这是我到目前为止的代码
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]
。
非常感谢任何帮助。
答案 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;
现在变换将发生如下,对于我们的示例,i
以i = 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
的参数是