1

如果我声明一个二维数组,例如:

int[][] numbers = new int[5][];

我认为您必须单独声明/初始化 5 个 int[] 中的每一个?例如,在我为 numbers[0][1] 赋值之前,我不得不说:

numbers[0] = new int[4];

我写了一个小程序,并在 numbers[0][1] 中显式地输入了一个值,然后运行它,它在没有先初始化 numbers[0] 的情况下工作。我完全不认为必须首先在二维数组中初始化各个数组吗?

编辑:我的误解是在初始化。第一个 2 语句是可以的,因为我声明 goodArray 中每个 int[] 的长度为 3,这导致它们都被初始化。而在 badArray 声明中,我只声明了有多少个数组(3),所以我得到了一个 npe:

int [][]goodArray = new int[3][3];
goodArray[0][1] = 2;

int[][] badArray = new int[3][];
badArray[0][0] = 2;
4

3 回答 3

0

int[][] 数字 = 新的 int[5][];

使用上一行,您创建了 5 个 int[] 一维数组。现在您需要在使用它们之前说出每个一维数组的大小。Java 提供了这种灵活性,您可以在二维数组中拥有可变大小的一维 int [] 数组。

于 2013-06-23T18:27:09.470 回答
0

使用Java中的多维数组,您可以指定一个位置,无需单独定义它们。

于 2013-06-23T18:09:02.110 回答
0

您可以使用以下示例轻松测试 2D 数组的行为:

int[][] numbers1 = new int[][] { {1, 2, 3}, {1, 2, 3, 4, 5}}; /* full initialization */
numbers1 = new int[3][]; /* [3][0] is null by default */
try {
  System.out.println(numbers1[0][0]);
} catch (NullPointerException e) {
  System.out.println(e);
}
numbers1[0] = new int[3]; /* all three ints are initialized to zero by default */
System.out.println(numbers1[0][0]);
numbers1[0] = new int[] {1, 2, 3};
System.out.println(numbers1[0][0]);

将产生以下输出:

java.lang.NullPointerException
0
1
于 2013-06-23T18:13:19.533 回答