Java 将阵列向右移动一个插槽
这可能已经得到了回答,但我已经寻找了一段时间,所有的解决方案都是这么说的。如果已经回答,请将我重定向到正确的线程 这个概念很简单。我需要将数组中的每个元素向右移动一个位置。这必须通过用户提供的索引来完成。下面是应该发生的事情: 预期产出Java 将阵列向右移动一个插槽,java,arrays,Java,Arrays,这可能已经得到了回答,但我已经寻找了一段时间,所有的解决方案都是这么说的。如果已经回答,请将我重定向到正确的线程 这个概念很简单。我需要将数组中的每个元素向右移动一个位置。这必须通过用户提供的索引来完成。下面是应该发生的事情: 预期产出 {0,1,2,3}-->添加(4(元素),1(位置))-->{0,4,1,2,3} 但是,在测试代码时,我得到了如下结果: 实际结果 {0,1,2,3}-->添加(4,1)-->{0,4,1,1,1} 这是我的密码: private void shiftRig
{0,1,2,3}-->添加(4(元素),1(位置))-->{0,4,1,2,3} 但是,在测试代码时,我得到了如下结果: 实际结果
{0,1,2,3}-->添加(4,1)-->{0,4,1,1,1} 这是我的密码:
private void shiftRight(整数索引)
{
断言!isFull();
for(inti=index;i
我觉得我已经非常接近解决这个问题了。就像我不认为有什么大问题,但我似乎找不到它。当您要将元素向右移动时,您不能从左向右遍历数组,因为您将覆盖下一个数组点上的值。我还注意到你写了“I
int[] array = new int[prevValue+1];
现在您必须将值向右移动,以防止覆盖下一个值,我们从右开始向左移动(取决于您使用的是相同的数组还是不同的数组)
然后,您可以在保留的额外位置设置一个新值:
elements[startPos]=value;
最后但并非最不重要的一点是,您必须填充以前的元素(如果您使用的是相同的数组,则可以忽略此项)
for(int i=0;i
将元素向右移动时,不能从左向右遍历数组,因为这样会覆盖下一个数组点上的值。我还注意到你写了“Iint[] array = new int[prevValue+1];
现在您必须将值向右移动,以防止覆盖下一个值,我们从右开始向左移动(取决于您使用的是相同的数组还是不同的数组)
然后,您可以在保留的额外位置设置一个新值:
elements[startPos]=value;
最后但并非最不重要的一点是,您必须填充以前的元素(如果您使用的是相同的数组,则可以忽略此项)
for(int i=0;i
这里是您的问题所在:
for(int i = index; i < elements.length - 1; i++)
{
elements[i + 1] = elements[i];
}
for(int i=index;i
让我们以你为例
{0,1,2,3}
i=1
您可以将
元素[i+1]
或元素[2]
设置为元素[1]
。所以,您的新数组是{0,1,1,3}
。到现在为止,一直都还不错。但是现在,当你把3设置为当前的数字时,你就把它设置为你之前设置的数字。因此,您将得到{0,1,1,1}
。避免这种情况的方法是从右侧迭代,这样数字就不会丢失。这里是您的问题所在:
for(int i = index; i < elements.length - 1; i++)
{
elements[i + 1] = elements[i];
}
for(int i=index;i
让我们以你为例
{0,1,2,3}
i=1
您可以将
元素[i+1]
或元素[2]
设置为元素[1]
。所以,您的新数组是{0,1,1,3}
。到现在为止,一直都还不错。但是现在,当你把3设置为当前的数字时,你就把它设置为你之前设置的数字。因此,您将得到{0,1,1,1}
。避免这种情况的方法是从右侧进行迭代,这样数字就不会丢失。当您需要的是一个列表时,看起来您使用的是一个数组。为什么不使用列表(如ArrayList、Vector或任何其他具有insert方法的列表实现)?@Mike'Pomax'Kamermans列表会更好,但为了这个项目,我必须使用arrayIn这种情况下,您可能想了解您将第二个元素(即1
复制到第三个元素(即1
),然后将第三个元素(即现在的1
)复制到第四个元素,并继续一次又一次地复制相同的值。当i=(elements.length-1)当您想要的是一个列表时,您似乎正在使用数组。为什么不使用列表(如ArrayList、Vector或任何其他具有insert方法的列表实现)?@Mike'Pomax'Kamermans一个列表会更好,但是为了这个项目,我必须使用一个数组。在这种情况下,你可能想了解你把第二个元素1
复制到第三个元素,第三个元素变成1
,然后把第三个元素现在是1
复制到第四个元素,然后继续to一次又一次地复制相同的值当i=(elements.length-1)时,这将导致索引越界错误而崩溃