多次元配列のコードの中で良く分からない点があったので
質問させていただきます。
コードは以下の通りです。
class Number {
public static void main (String[]args) {
int[][] a={
{10,20},
{30,40},
{50,60}
};
System.out.println("a[0][0]="+a[0][0]
+"a[0][1]="+a[0][1]);
System.out.println("a[1][0]="+a[1][0]
+"a[1][1]="+a[1][1]);
System.out.println("a[2][0]="+a[2][0]
+"a[2][1]="+a[2][1]);
}
}
さて、このコードの
実行結果が
a[0][0]=10 a[0][1]=20
a[1][0]=30 a[1][1]=40
a[2][0]=50 a[2][1]=60
と表示されますが、
なぜ、例えば、a[0][0]が10になるのかわかりません。
方向云々ではなく、配列の入れ子と考えれば宜しいように思います。
a は、{ {10, 20}, {30, 40}, {50, 60} } と書き表すことができる。つまり、配列 a は3個の要素を持つ配列であるが、その各要素もまた2個の要素を持つ配列である。つまり a は配列が入れ子状になったものである。
というところです。
なお、
int a[][] = new int[3][3];
は誤記であろうかと思います。
int a[][] = new int[3][2];
であろうと思います。
以下の部分で初期値を代入しているからです。
int[][] a={ {10,20}, {30,40}, {50,60} };
この代入式を分解すると、下記と同じになります。
int a[][] = new int[3][3]; a[0][0] = 10; a[0][1] = 20; a[1][0] = 30; a[1][1] = 40; a[2][0] = 50; a[2][1] = 60;
回答ありがとうございます。
ところで
int a[][] = new int[3][3];
のなかの[3][3]という部分はy方向とx方向の要素数を表すと本にありました。
この場合、データが6つなので(10,20,30,40,50,60)
どうしてint a[][] = new int[2][3];
でないのかと思ったのですが、どうしてなのでしょうか。
この場合厳密には new int[3][2]です。
恐らく[3][3]にした理由は特にないと思います。(間違ってたらすみません)
それよりわかりやすく分解してあるので少し追加。
int[][] a = new int[3][2]
Java内ではこんな感じに作られます。
a
↓
[0] → [ ][ ]
[1] → [ ][ ]
[2] → [ ][ ]
{10,20}
{30,40}
{50,60} と並ぶのはそのためです。
回答ありがとうございました!
方向云々ではなく、配列の入れ子と考えれば宜しいように思います。
a は、{ {10, 20}, {30, 40}, {50, 60} } と書き表すことができる。つまり、配列 a は3個の要素を持つ配列であるが、その各要素もまた2個の要素を持つ配列である。つまり a は配列が入れ子状になったものである。
というところです。
なお、
int a[][] = new int[3][3];
は誤記であろうかと思います。
int a[][] = new int[3][2];
であろうと思います。
回答ありがとうございました。入れ子という説明が分かりやすかったです。
int a[][] = new int[3][2]; についてですが、
順序が[2][3]ではなく、[3][2]なのは入れ子レベルが大きい順に記述するということでしょうか?
>[3][2]なのは入れ子レベルが大きい順に記述するということでしょうか?
あなたの感覚では、そうです。
単に前から順に書いてるだけですけど。
回答ありがとうございました
回答ありがとうございました。入れ子という説明が分かりやすかったです。
int a[][] = new int[3][2]; についてですが、
順序が[2][3]ではなく、[3][2]なのは入れ子レベルが大きい順に記述するということでしょうか?