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



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

您需要从函数返回数组:

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);  
}

你可以简单地这样做:

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;
}

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

最新更新