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 として出力されます。
静的メソッドではメインからの配列が許可されないのではないかと考え始めています。サイズを変更するには?
できない場合、特に静的メソッドのみを使用して配列のサイズを変更する別の方法はありますか?

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 に答える