簡體   English   中英

如何更新2D數組中的單個行? (Java)

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

我正在嘗試制作一個可以動態更新的2D數組。 可以說我有一個10行3列的2D數組。 我想將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");
        }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM