こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

配列について

  class Array01{
public static void main(String[] args){
int[][] ia = {{11,12},{21},{41,42,44}};

for(int i = 0; i < ia.length; i++){
for(int j = 0; j < ia[i].length; j++ ){
System.out.print(ia[i][j] + " ");
}
System.out.println();
}
}
}
}

(i < ia.length) と (j < ia[i].length)のとこの意味が分かりません。特にiaとia[i]の違いなんか教えてもらえると助かります。for文については理解してるんですが・・・

投稿日時 - 2006-05-23 03:08:06

QNo.2169070

困ってます

質問者が選んだベストアンサー

まず、Javaの場合配列は1次元の配列しか作れず、尚且つ「配列クラス」というクラスによって実現しています(2次元以上の配列は配列の中に配列を入れるという方法で実現しています)。で、new すると配列クラスのインスタンスが作られます。length というのはそのクラスの中にある変数ですが、これが配列の要素数を表します。なのでたとえば

int[] a = new int[3];

と書いた場合 a.length は 3 になります。

で、問題の

int[][] ia = {{11,12},{21},{41,42,44}};

ですが、これは 「『int 配列』の配列」です(配列の中に配列を入れて2次元にしているということです)。ia.length は 3 になります。この3という値は ia[0]~ia[2] までの3要素が作られているためです。で、ia[0]~ia[2]には全て int 配列へのインスタンスが入っていて、それらが 11, 12 などの数値を保持しています。ia[0].length は 2、ia[1].length は 1、ia[2].length は 3 になります。これは ia[0][0]~ia[0][1], ia[1][0], ia[2][0]~ia[2][2] が存在していることを意味します。


これで分かりますか?

投稿日時 - 2006-05-23 13:19:27

お礼

有難うございました。配列の考え方ってのが初めてだったんで、メモリの確保とかの意味が把握できず、その上2次元配列とかでてきて、分からなかったんですが、随分分かるようになりました。

投稿日時 - 2006-05-24 00:03:18

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

ia.length は、全体の数
{{11,12},{21},{41,42,44}};
で言えば、内側の { }の数(3)
ia[i].length は、{ }それぞれの要素の数(2, 1, 3)

投稿日時 - 2006-05-23 11:39:05

お礼

ありがとうございました。覚えておきます。

投稿日時 - 2006-05-24 00:14:49

ANo.1

ここで示されている、iaという変数は、配列の配列(二次元配列)です。

int[][] ia = {{11,12},{21},{41,42,44}};

の部分を、別の方法で書くと、以下の通りになります。

int[][] ia = new int[3][];
ia[0] = new int[] { 11, 12 };
ia[1] = new int[] { 21 };
ia[2] = new int[] { 41, 42, 44 };

ia[i]は、上記のia[0]、ia[1]、ia[2]に相当します。

投稿日時 - 2006-05-23 06:20:52

お礼

有難うございました。ia[0],ia[1],ia[2]それぞれのとこに{11,12}{21}{41,42,44}とはいると考えればいいんですね。なんとなくイメージできました。

投稿日時 - 2006-05-24 00:12:42