2015-02-12 4 views
0

Таким образом у меня есть массив с элементами [10], что я добавляю из верхней части массива, так что-то вроде этогокопирование массива в том же массиве

[ «», «», «», «», «», 5,4,3,2,1]

и когда я удалить элемент Я хотел переложить на них ниже него, чтобы занять свое место

[ «», «», «»,» »,„“, 5,3,2,1]

public void moveUP(int location, int Arraysize) { 

    System.arraycopy(vehicle, 0, vehicle, 0, location + 1); 
} 

Я попытался с помощью копии массива, но когда я проверяю отладчику элементы а Остается то же самое.

изменить: забыли упомянуть, что местоположение было элементом, который я планировал удалить.

+0

Вы можете написать цикл 'for', который будет начинаться с' location' и перемещается «влево», чтобы сдвинуть элементы «вправо». А по индексу '0' он вставляет пустую строку. – Tom

ответ

1

Я считаю, что правильная функция должна выглядеть следующим образом:

public void moveUP(int location, int arraysize){ 
    System.arraycopy(vehicle, 0, vehicle, 1, location-1); 
    vehicle[0] = ""; 
} 

Это перемещает каждый элемент от 0 до места-1 в одном месте до конца, поэтому его после копирования на позиции 1 .... Местонахождение (поэтому элемент в позиции удаляется)

+2

Возможно, вы захотите добавить, что OP должен использовать только 'location' (вместо' location-1'), если 'location' равен нулю. Но хороший ответ. – Tom

+0

Отлично, это сработало! –

0

Я думаю, что это невозможно с одного звонка System.arraycopy. Вы можете переместить все элементы массива влево или вправо с помощью arraycopy (при условии, что у вас достаточно места), но в любом случае будут старые оставшиеся элементы, которые были скопированы и не установлены в 0/null. Пример:

int[] test = new int[] {0,0,7,7}; 
System.arraycopy(test, 2, test, 1, 2); // this will shift all elements 
             // starting at position 2 to position 1 
// but test now looks like this = [0,7,7,7] 

Так что последние 7 все еще там. Решение этого может выглядеть примерно так:

int[] newArr = new int[oldArr.length]; 
System.arraycopy(oldArr, 0, newArr, 0, posToBeDeleted); 
System.arraycopy(oldArr, posToBeDeleted+1, newArr, posToBeDeleted, elemsRemaining); 
oldArr = newArr; 
0

destPos аргумент четвертый, пятый не один. Вероятно, ваш звонок должен выглядеть как System.arraycopy(vehicle, 0, vehicle, location, Arraysize), предполагая, что вы хотите перейти от 0 до location, и в вашем массиве есть Arraysize элементов.

Смежные вопросы