Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将阵列向右移动一个插槽_Java_Arrays - Fatal编程技术网

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 首先,如果您使用的是基元类型,请确保您的数组有足够的空间(您还需要1个)。因此,您需要创建第二个数组

例如:

int[] array = new int[prevValue+1];
现在您必须将值向右移动,以防止覆盖下一个值,我们从右开始向左移动(取决于您使用的是相同的数组还是不同的数组)

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

elements[startPos]=value;
最后但并非最不重要的一点是,您必须填充以前的元素(如果您使用的是相同的数组,则可以忽略此项)

for(int i=0;i
将元素向右移动时,不能从左向右遍历数组,因为这样会覆盖下一个数组点上的值。我还注意到你写了“I 首先,如果您使用的是基元类型,请确保您的数组有足够的空间(您还需要1个)。因此,您需要创建第二个数组

例如:

int[] 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)时,这将导致索引越界错误而崩溃