所以我有一个带有元素[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 :(得分:1)
我认为正确的功能应如下所示:
public void moveUP(int location, int arraysize){
System.arraycopy(vehicle, 0, vehicle, 1, location-1);
vehicle[0] = "";
}
这会将每个元素从0移动到位置1,从一个位置移动到另一个位置,所以它在位置1 ...位置上复制之后(所以位置上的元素被删除)
答案 1 :(得分: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;
答案 2 :(得分:0)
destPos
参数是第四个,而不是第五个。您的调用应该看起来像System.arraycopy(vehicle, 0, vehicle, location, Arraysize)
,假设您要从0转换为location
,并且数组中有Arraysize
个元素。