如何更新二维数组中的个别行? (Java)

How to update individual rows in a 2D array? (Java)

我正在尝试制作一个可以动态更新的二维数组。假设我有一个 10 行 3 列的二维数组。我想向特定行添加一个 int 值,从而向该行(并且仅该行)添加一个额外的列,这样它就有 4 列。这是我到目前为止所拥有的。

public class DynamicArray {
    private int[][] array;
    private int size;

    public DynamicArray(int initialSize) {
        array = new int[10][initialSize];
        size = 0;
    }

    public int get(int j) {
        return array[0][j];
    }

    public int getSize() {
        return size;
    }

    public void put(int N) {
        if (size < array[0].length)
            array[0][size] = N;
        else // need to create a bigger array
        {
            int[][] temp = new int[10][2 * size];
            for (int i = 0; i < array.length; i++)
                for (int j = 0; j < array[i].length; j++)
                    temp[i][j] = array[i][j];
            temp[0][size] = N;
            array = temp;
        }
        size = size + 1;
    }

    public static void main(String[] args) {
        DynamicArray da = new DynamicArray(3);
        da.put(2);
        da.put(1);
        da.put(3);
        da.put(1);
        da.put(4);
        da.put(5);
        for (int i = 0; i < da.getSize(); i++) {
            for (int j = 0; j < 9; j++) {
                System.out.print((da.get(i) + "\t"));
            }
            System.out.println("\n");
        }
    }

}

问题在于,使用此代码,程序将新值添加到每一行,而不是仅添加到指定行(在本例中为第 0 行)。 我该如何解决这个问题?

此外,我怎样才能让程序也做相反的事情 -> 从单个行中删除一个值并缩短该行?

如果您只想将新元素添加到新数组[0]。

public void put(int N) {
    if (size < array[0].length)
        array[0][size] = N;
    else { // need to create a bigger array

        int[] temp = new int[2 * size]; // Temporary create a new array with double size

        // fill the empty array with array[0] existing elements
        for (int i = 0; i < size; i++) {
            temp[i] = array[0][i];
        }

        // Change the array[0] to point to the new array
        array[0] = temp;

        // Add the new element to the new array
        array[0][size] = N;
    }
    size = size + 1;
}

如果您想放入特定的行号,您应该将其作为 put 方法中的参数获取。

public void put(int N, int rowNum);

您还应该将 size 元素更改为一个数组,它将跟踪每一行的大小。

int[] size = new int[10];

仅当特定行达到其限制时相应地更改行的大小。

检查下面的代码

public class DynamicArray {
    private int[][] array;
    private int[] size;

    public DynamicArray(int initialSize) {
        array = new int[10][initialSize];
        size = new int[10];
    }

    public int get(int rowNum, int colNum) {
        return array[rowNum][colNum];
    }

    public int getSize(int rowNum) {
        return size[rowNum];
    }

    public void put(int N, int rowNum) {
        if (size[rowNum] < array[0].length)
            array[rowNum][size[rowNum]] = N;
        else { // need to create a bigger array

            int[] temp = new int[2 * size[rowNum]];
            for (int i = 0; i < size[rowNum]; i++) {
                temp[i] = array[rowNum][i];
            }
            array[0] = temp;
            array[0][size[rowNum]] = N;
        }
        size[rowNum] = size[rowNum] + 1;
    }

    public static void main(String[] args) {

        DynamicArray da = new DynamicArray(3);
        da.put(2, 0);
        da.put(1, 0);
        da.put(3, 0);
        da.put(1, 0);
        da.put(4, 0);
        da.put(5, 1);
        da.put(2, 4);
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < da.getSize(i); j++) {
                System.out.print((da.get(i, j) + "\t"));
            }
            System.out.println("\n");
        }
    }

}