ioaop
ioaop

Reputation: 45

Deletion algorithm for array

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

So I have this method, see above, the first parameter is the name of the array, the second is the value I want deleted, and the third is the index of which it can be found. For example:

Deletion(list,50,4);

In this case, the array I chose is called list, the value I want deleted is 50, and the index of which the value is located is 4.

If we were to use Deletion(list,50,4), this method is supposed to replace the 50 at the index of 4 with the element at the index of 5 and the element at index of 5 is replaced with the element at index of 6 and so on.

If this is the array list: 90 76 55 48 50 69 66 52 87 56 89 91 86 73 50 68 52 75 54 45

The output should be: 90 76 55 48 69 66 52 87 56 89 91 86 73 50 68 52 75 54 45 45

However,I can only get it to replace the 50 but not any of the other numbers.

This is the output I get: 90 76 55 48 69 69 66 52 87 56 89 91 86 73 50 68 52 75 54 45

The 50 is replaced with the 69 but everything else stays the same, I need the other elements to "shift" to the left.

Here is my code so far for the Deletion method:

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

The length of the list is 20, subtract 1, so i = 19. I know 19 is not less than 4 so it skips the for loop, but if I made it i > position, I get this error:

java.lang.ArrayIndexOutOfBoundsException: 20

So this is where I'm stuck. Please help!

Upvotes: 1

Views: 1562

Answers (2)

gvlasov
gvlasov

Reputation: 20015

You'd better be using System.arraycopy instead on implementing your own algorithm for moving array elements. Like this:

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

Also see this question: Delete item from array and shrink array

Upvotes: 0

user3072912
user3072912

Reputation: 64

You need to redefine the value of i so that it is initialized as the the int value of position (so that your deletion/replacement process can start there).

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

Your i.max_value should be array.length-2 so that i will incrementally increase until the end of the array. It shouldn't be -1 since you are essentially deleting the last index of your array (as the value has nothing)

Upvotes: 1

Related Questions