【问题标题】:How to update individual rows in a 2D array? (Java)如何更新二维数组中的单个行? (爪哇)
【发布时间】:2015-01-18 04:13:36
【问题描述】:

我正在尝试制作一个可以动态更新的二维数组。假设我有一个 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 行)。 我该如何解决这个问题?

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

【问题讨论】:

  • 是否有您不想使用其中一种列表类型的特殊原因?他们很容易解决这个问题。
  • Mic 是对的——ArrayList 也适合这种事情。虽然如果你下定决心;我建议将二维数组复制到另一个二维数组,然后重新初始化原始二维数组以获得适当的尺寸,然后相应地添加额外的值。
  • @Mic 这是一个分配,我们只使用数组。 注意我对java很陌生,刚刚学习,我们只应该使用到目前为止我们在课程中介绍的内容。我们尚未涵盖任何列表类型。
  • @Pr0metheus - 好的,这是一个公平的理由。正如伍德罗所说,您正在考虑定义一个新数组,将现有数组复制到其中,然后替换它。 但是我认为它可以在一个维度上完成,而不是整个事情。我将启动我的 IDE 并尝试为您确认。
  • Sashwat 的回答已经解决了我要提出的几乎所有问题,他一次只重新定义一行,这就是我所追求的。所以,没有太多要补充的。我想诀窍在于您不必将其视为变量网格。您也可以将其视为数组数组。

标签: java arrays multidimensional-array


【解决方案1】:

如果您只想将新元素添加到新数组[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");
        }
    }

}

【讨论】:

  • 你能发布一些代码来告诉我我将如何去实现它吗? ( int[] size = new int[]; )
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-06
  • 2016-09-03
  • 1970-01-01
  • 2018-10-23
  • 2015-10-23
相关资源
最近更新 更多