首页 > 解决方案 > 将数组向右移动一个插槽

问题描述

这可能已经得到回答,但我已经寻找了一段时间,这就是所有解决方案所说的。如果已经回答,请将我重定向到正确的线程。

这个概念很简单。我需要将数组的每个元素向右移动一个位置。这必须通过用户提供的索引来完成。这是应该发生的事情:

预期输出
{0, 1, 2, 3} --> add(4 (element), 1 (location)) --> {0, 4, 1, 2, 3}

但是,在测试我的代码时,我得到了这样的结果:

实际结果
{0, 1, 2, 3} --> add(4, 1) --> {0, 4, 1, 1, 1}

这是我的代码:

private void shiftRight(int index) 
{
  assert !isFull();

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

我觉得我非常接近解决这个问题。就像我不认为有什么大问题,但我似乎找不到它。

标签: javaarrays

解决方案


当你要将元素向右移动时,你不能从左到右遍历数组,因为你会覆盖下一个数组点的值。我还注意到您写了“i < elements.length - 1”。您可能不应该添加 -1,否则您将跳过数组中的最后一个值(除非您愿意)。

首先,如果您使用原始类型,请确保您的数组有足够的空间(您还需要 1 个空间)。因此,您需要创建第二个数组。

例子:

int[] array = new int[prevValue+1];

现在您必须将值向右移动,以防止覆盖我们从右侧开始向左移动的下一个值(取决于您使用的是相同的数组还是不同的数组)。

for (int i = array.length-1; i >= startPos; i--) {
     elements[i+1] = array[i];
}

然后在您预留的额外位置上,您可以设置一个新值:

elements[startPos]=value;

最后但并非最不重要的一点是,您必须填充以前的元素(如果您使用相同的数组,您可以忽略它)。

for (int i = 0; i < startPos; i++) {
   elements[i] = array[i];
}

推荐阅读