0

我正在尝试通过将每个方法调用的数组大小加 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 的数组要调整大小?
如果不能,您是否有另一种方法来专门使用静态方法来调整数组的大小?

4

2 回答 2

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);  
}
于 2012-12-09T17:52:14.527 回答
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;
}

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

于 2012-12-09T02:44:18.910 回答