我试图通过每个方法调用将数组大小添加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调整数组的大小?
如果它不能,你有另一种方法来专门使用静态方法调整数组的大小吗?
答案 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;
}
你不能做的事情(没有复杂的反射代码)是将变量名称传递给方法,并让它改变具有该名称的数组的长度。