数组的删除算法

时间:2015-01-31 22:06:37

标签: java arrays algorithm

Deletion(int array[ ], int delete, int position)

所以我有这个方法,见上文,第一个参数是数组的名称,第二个是我想删除的值,第三个是可以找到它的索引。例如:

Deletion(list,50,4);

在这种情况下,我选择的数组称为list,我想删除的值是50,值所在的索引是4.

如果我们使用Deletion(list,50,4),则此方法应该将索引为4的50替换为索引为5的元素,将索引为5的元素替换为索引处的元素6等等。

如果这是阵列列表:90 76 55 48 50 69 66 52 87 56 89 91 86 73 50 68 52 75 54 45

输出应为:90 76 55 48 69 66 52 87 56 89 91 86 73 50 68 52 75 54 45 45

但是,我只能用它取代50而不是任何其他数字。

这是我得到的输出:90 76 55 48 69 69 66 52 87 56 89 91 86 73 50 68 52 75 54 45

50替换为69,但其他一切保持不变,我需要其他元素“向左移”。

这是我目前为删除方法的代码:

for (int i=array.length-1; i<position; i ++)
  array[i] = array[ i+1];
array[position] = array[position+1]

列表的长度为20,减去1,因此i = 19。我知道19不小于4所以它跳过了for循环,但是如果我做了i > position,我就会收到这个错误:

  

java.lang.ArrayIndexOutOfBoundsException:20

所以这就是我被困住的地方。请帮忙!

2 个答案:

答案 0 :(得分:1)

您需要重新定义i的值,以便将其初始化为位置的int值(以便您的删除/替换过​​程可以从那里开始)。

for (int i = position; i < array.length - 2; i++)
{
    array[i] = array[i+1];
}

您的i.max_value应为array.length-2,以便i逐渐增加,直到数组结束。它不应该是-1,因为您基本上删除了数组的最后一个索引(因为该值没有任何内容)

答案 1 :(得分:0)

您最好使用System.arraycopy来实现自己的移动数组元素算法。像这样:

System.arraycopy(array, position+1, array, position, array.length-position);

另请参阅此问题:Delete item from array and shrink array