1

たとえば、2 次元配列を宣言すると、次のようになります。

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

5つのint []のそれぞれを個別に宣言/初期化する必要があると思いましたか? たとえば、numbers[0][1] に値を代入する前に、次のように言わなければなりません。

numbers[0] = new int[4];

小さなプログラムを作成し、numbers[0][1] に明示的に値を入れて実行したところ、最初に numbers[0] を初期化せずに機能しました。個々の配列を 2 次元配列で最初に初期化する必要があると完全に考えていませんか?

編集:私の誤解は初期化にありました。最初の 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

Java の多次元配列では、位置を指定できるため、個別に定義する必要はありません。

于 2013-06-23T18:09:02.110 に答える
0

int[][] 数値 = 新しい int[5][];

前の行で、5 つの int[] 1 次元配列を作成しました。使用する前に、各 1 次元配列のサイズを指定する必要があります。Java はこの柔軟性を提供し、2D 配列内に可変サイズの 1 次元 int [] 配列を含めることができます。

于 2013-06-23T18:27:09.470 に答える
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 に答える