通过静态方法修改数组大小

时间:2012-12-09 02:33:40

标签: java arrays static

我试图通过每个方法调用将数组大小添加1来调整数组大小 我创建了一个静态方法,它以数组作为参数。

public static void addArray(int arrayName[]) {
    int tempNum[] = new int[arrayName.length]; // save the numbers before add array size
    for (int i = 0; i < arrayName.length; i++) { // because by adding/removing array size, it would clear element array
        tempNum[i] = arrayName[i];
    }
    arrayName = new int[arrayName.length + 1]; // adds array size by 1
    for (int i = 0; i < arrayName.length - 1; i++) { // sets all the saved numbers to the new element in the array
        arrayName[i] = tempNum[i];   // stops at (length - 1) because I want to leave it blank at the last element
    }
}

(对不起,如果代码搞砸了,我不知道如何在这里正确发布代码)

总的来说,我这样做;

public static void main(String[] args) {

    int num[] = {0, 1, 2, 3, 4};

    addArray(num);

    System.out.println(num.length);  
}

如您所见,默认数组大小(长度)应为5,但无论我多少次调用该方法,它总是打印为5.
现在我开始认为静态方法不允许从main调整数组的大小? 如果它不能,你有另一种方法来专门使用静态方法调整数组的大小吗?

2 个答案:

答案 0 :(得分:1)

您需要从函数返回数组:

public static int[] addArray(int arrayName[]) {
    ...
    arrayName = new int[arrayName.length + 1]; // adds array size by 1
    ...
    return arrayName;
}


public static void main(String[] args) {
    int num[] = {0, 1, 2, 3, 4};
    num = addArray(num);
    System.out.println(num.length);  
}

答案 1 :(得分:0)

你可以这样做:

int num[] = {0, 1, 2, 3, 4};
num = Arrays.copyOf(num, num.length + 1);
System.out.println(num.length);

然后打印6。

您的代码存在的问题是,当您调用方法时,该方法会收到引用的副本。因此,该方法不能改变调用方法中变量引用的对象。

另一种方法是使num成为静态字段::

static int num[] = {0, 1, 2, 3, 4};
public static void main(String[] args) {

    addArray(); // or use Arrays.copyOf() as above

    System.out.println(num.length);  
}

public static void addArray() {
    int tempNum[] = new int[num.length + 1];
    System.arraycopy(num, 0, tempNum, 0, num.length);
    num = tempNum;
}

你不能做的事情(没有复杂的反射代码)是将变量名称传递给方法,并让它改变具有该名称的数组的长度。