如何在Java中打印多维数组?

4
int arr[][] = new int[2][];

我是Java的初学者,不明白为什么在Java中初始化一个多维数组时这是有效的。我尝试使用以下方法打印一个多维数组:

System.out.println(Arrays.toString(arr));

我看不到值;相反,它打印出来的是对象地址。


1
打印出来的不是内存地址,而是对象的十六进制格式哈希值,请参见Object::toString文档。至于初始化:如果要初始化多维数组,只需要定义最外层的维度即可。需要记住的是,多维数组只是一个数组的数组。因此,每个内部数组的大小可以不同。 - Turing85
3个回答

3

int arr[][] = new int[2][];创建一个由两个一维数组组成的数组,其中每个数组的长度可以是任意的。对于多维数组初始化,只需要指定第一个维度即可。

如果要打印多维数组的元素,需要使用Arrays.deepToString方法。

System.out.println(Arrays.deepToString(arr));

1
声明是有效的,因为int[][]是一个数组的数组。所以int[x]本身就是一个数组。如果你声明int[2][],你可以在该数组中有多达2个数组,但你不需要指定内部数组的大小。

这也是为什么Arrays#toString()不起作用的原因。因为你只是对内部数组进行#toString


1
理解为什么这个可以正常工作
int arr[][] = new int[2][];

我们需要了解在Java中什么是不规则数组不规则数组是由成员数组大小不同的数组组成的数组。
int[][] arr = new int[2][];

// row 0 gets 5 columns
arr[0] = new int[5];
// row 1 gets 11 columns
arr[1] = new int[11];

创建数组只需传递行数,因为列数可以是可变的。

如何遍历不规则数组?

int a[][] = new int[2][];
a[0] = new int[2];
a[1] = new int[1];

a[0][0] = 1;
a[0][1] = 2;
a[1][0] = 3;

for(int i[]: a) {
    for(int j: i) {
        System.out.println(j);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接