【发布时间】: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