The LayerManager doesn’t know about your array, so removing the sprite from the LayerManager won’t have any effect on your array.
If you just do ‘c[2] = null;’, then c[3] won’t automatically become c[2], because null is a perfectly valid value for c[2].
What you could do is (where i = 2 in your case):
System.arraycopy(c, i+1, c, i, c.length - 1 - i);
but notice that afterwards c.length won’t have changed, even though the last entry is now meaningless. You’ll have to keep a separate variable called ‘cLength’ or something and decrease it by one.
A much simpler solution is just to use a Vector instead of an array. Then, yes, if you do ‘vector.removeElementAt(2);’, afterwards the elements at 3 upwards are moved to being at 2 upwards. (Actually, the Vector’s implementation has done a System.arraycopy just as above).