人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javaプログラミングの入門書を読んでおり、そのなかの
多次元配列のコードの中で良く分からない点があったので
質問させていただきます。

コードは以下の通りです。

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になるのかわかりません。

●質問者: ripodbnf
●カテゴリ:コンピュータ
✍キーワード:Class Java Number Out String
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● deflation
●23ポイント

以下の部分で初期値を代入しているからです。

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];

でないのかと思ったのですが、どうしてなのでしょうか。


2 ● bnn
●23ポイント

この場合厳密には new int[3][2]です。

恐らく[3][3]にした理由は特にないと思います。(間違ってたらすみません)

それよりわかりやすく分解してあるので少し追加。


int[][] a = new int[3][2]

Java内ではこんな感じに作られます。

a

[0] → [ ][ ]

[1] → [ ][ ]

[2] → [ ][ ]


{10,20}

{30,40}

{50,60} と並ぶのはそのためです。

◎質問者からの返答

回答ありがとうございました!


3 ● dokonodareo
●28ポイント ベストアンサー

方向云々ではなく、配列の入れ子と考えれば宜しいように思います。

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]なのは入れ子レベルが大きい順に記述するということでしょうか?


4 ● tama213
●22ポイント

>[3][2]なのは入れ子レベルが大きい順に記述するということでしょうか?

あなたの感覚では、そうです。

単に前から順に書いてるだけですけど。

◎質問者からの返答

回答ありがとうございました

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ