仅使用行数初始化二维数组

Initializing a 2D array with only the number of rows

所以我对如何在 Java 中使用二维数组有点困惑,如果你一开始只声明行数。 例如:

int[][] x = new int[5][];

但是您将如何继续填充这 5 行?我在想你需要先声明每一行的大小,但我想不出这样做的方法。如果我尝试做类似的事情:

x[0][0] = 5;

编译器告诉我 x[0] 为空。

在此先感谢您的帮助。

您尝试定义一个二维数组:首先您指定了行数,但没有指定列数及其必要性。

例如,我为第一行定义了 2 列并分配了值:

int[][] x = new int[5][];
x[0] = new int[2];
x[0][0] = 5;
System.out.println(x[0][0]);

为了更好地理解二维数组,您需要阅读更多内容:

https://www.programiz.com/java-programming/multidimensional-array

您无法访问 x[0][0],因为第 x[0] 行不存在任何列。 在使用它之前,您需要初始化一行中的每一列:

x[0] = new int[5];
x[1] = new int[5];

或使用循环:

for (int i = 0; i < 5; i++) {
    x[i] = new int[5];
}

就这么办:

public class ClassName {
    public static void main(String[] args) {
        //Assignment of multi-dimensional array
        int[][] multiarray = new int[2][3];
        // assign value to row "0" and col "0" index
        multiarray[0][0] = 23;
        System.out.println("My Age is:" + multiarray[0][0]);
    }
}
int ROWS = 5;
int COLUMNS = 12;
int[][] x = new int[ROWS][];

将所有ROWS的值初始化为零:

IntStream.range(0, ROWS).forEach(i -> {
    x[i] = new int[COLUMNS];
});

如果您想初始化为不同的值,例如。 -1:

IntStream.range(0, ROWS).forEach(i -> {
    x[i] = new int[COLUMNS];
    Arrays.fill(x[i], -1);
});

二维数组的元素是一维数组。如果直接定义数组new int[5][4]则每一行的长度为4,否则可能会有所不同。当您创建一个具有未定义行长度的二维数组时,它的每个元素,实际上是一维数组,尚未初始化并且是 null。当您创建 int[] 的一维数组时,它默认用零初始化。如果直接定义二维数组,其行的元素将用零初始化。

二维数组的初始化

您可以定义没有行长度的列长度:

int[][] arr = new int[5][];

arr[0] = new int[]{1, 2, 3};
arr[3] = new int[2];
arr[3][1] = 9;
arr[4] = new int[]{3, 3, 2, 1, 6, 7};
// output:
[1, 2, 3]
null
null
[0, 9]
[3, 3, 2, 1, 6, 7]

您可以定义列和行的长度:

int[][] arr2 = new int[3][3];
arr2[0][0] = 1;
// output:
[1, 0, 0]
[0, 0, 0]
[0, 0, 0]

您可以在创建时定义二维数组的每个元素,可以选择保留行以供进一步操作:

int[][] arr3 = new int[][]{{1, 2, 3}, {4, 5}, {6}, null};
// output:
[1, 2, 3]
[4, 5]
[6]
null