对于一个给定的静态数组,比如说 a=[1,2,3,4,5],我想删掉一个给定下标的元素,比如下标为2的元素,得到a=[1,2,4,5],该如何操作呢?我写的如下: public void delete(int[] a,int key) { int[] temp=new int[a.length-1]; int i=0; if(key==0) while(i
就算你用你所熟悉的C++,你能对一个数组进行运行时的修改么?这显然不行。所以需要动态改动一个「数组」时你还是得用vector这样的容器。
Java这个OO严谨的玩意,在这个方面没什么区别,数组就是申请完了就不可变大小的玩意。如果你有这个需求,你就应该用ArrayList或者Vector这样的容器。
几行代码搞定:
public int[] delete(int[] a, int key) {
int[] b = new int[a.length - 1];
System.arraycopy(a, 0, b, 0, key);
if(key < a.length - 1)
System.arraycopy(a, key + 1, b, key, a.length - key - 1);
return b;
}
先创建一个长度是a.length-1的数组b,然后把a中要删除的index左边的元素拷贝到b,再把index右边的元素拷贝到b,完事。
至于题主的写法为什么不行,关键在于在你的程序最后a=temp这一句其实对调用者持有的数组引用是不起作用的。调用者的数组引用仍然指向的是[1,2,3,4,5]这个数组。所以得把这个方法从void改成int[]。具体可见这个问题:
java到底是值传递还是引用传递? - Java