Расширение многомерного массива (2D) - PullRequest
1 голос
/ 06 декабря 2010

Как я могу расширить многомерный массив в Java?
Мне нужно расширить его первое измерение.В таком формате, как myArray[x][7]
7 останется 7 на всех расширенных частях.

Ответы [ 4 ]

3 голосов
/ 06 декабря 2010

Массивы в Java имеют фиксированную длину, поэтому вы не можете расширить ее.Вам нужно будет создать новый массив большего размера, а затем скопировать содержимое старого массива в новый.Например:

public class Test {

    public static void main(String[] args) {
        int[][] myArray = new int[3][7];

        // Print first dimension
        System.out.println(myArray.length);   // prints 3

        myArray = addRow(myArray);

        // Print first dimension
        System.out.println(myArray.length);   // prints 4

    }

    private static int[][] addRow(int[][] previous) {

        int prevRowCount = previous.length;

        int[][] withExtraRow = new int[prevRowCount + 1][];
        System.arraycopy(previous, 0, withExtraRow, 0, previous.length);
        withExtraRow[prevRowCount] = new int[] { 1, 2, 3, 4, 5, 6, 7 };

        return withExtraRow;
    }

}

Конечно, вы также можете использовать, например, ArrayList<SomeType[]>, который динамически растет.(Это на самом деле предпочтительный способ при работе с динамически растущими массивами.)

import java.util.*;

public class Test {

    public static void main(String[] args) {
        List<int[]> myArray = new ArrayList<int[]>();

        // Print first dimension
        System.out.println(myArray.size());   // prints 0

        // Add three rows
        myArray.add(new int[] {  1,  2,  3,  4,  5,  6,  7 });
        myArray.add(new int[] { 11, 12, 13, 14, 15, 16, 17 });
        myArray.add(new int[] { 21, 22, 23, 24, 25, 26, 27 });

        // Print first dimension
        System.out.println(myArray.size());   // prints 3

    }
}
1 голос
/ 02 марта 2011

Вы также можете использовать метод Arrays.copyOf, например:

import java.util.Arrays;

public class Array2D {
    public static void main(String[] args) {
        int x = 5 //For example
        int[][] myArray = [x][7];

        myArray = Arrays.copyOf(myArray, myArray.length + 1); //Extending for one
        myArray[myArray.length - 1] = new int[]{1, 2, 3, 4, 5, 6, 7};
    }
}
0 голосов
/ 06 декабря 2010

Вы не можете.

Вы можете создать новый массив с правильными размерами, но я бы порекомендовал прочитать о классе ArrayList, который (насколько вам нужно знать) допускает динамические массивы.

0 голосов
/ 06 декабря 2010

Если вы хотите это сделать, создайте класс, который содержит массив в качестве переменной экземпляра и обрабатывает все взаимодействия с ним.

...