多次元配列とは2個以上の配列を含むもののことを指す。
配列については以下の記事を参照。
配列とは何か Javaプログラミング初心者の記録vol.26
二次元配列も多次元配列に含まれる。
考え方は二次元配列と同じことだが、二次元配列のところでまとめていなかった事があったから、復習もかねてこの機会に多次元配列についても見ていくことにする。
配列
配列を作るときのコードは作り方が2通りあった。
- 変数の型 [] 変数名 = {必要なデータの数だけ値を入力};
- 変数の型 [] 変数名 = new 変数の型 [必要なデータの数];
これは全部で5つのデータがあり、それぞれ「10」「20」「30」「40」「50」という値を持っているということ。
ただ、注意すべきはデータの数の数え方。
もしA[3]と書かれていたら、「40」を指す。
理由は、データの数は0から数え始められるから。
A[0]=10 A[1]=20 A[2]=30 A[3]=40 A[4]=50
二つ目は必要なデータの数だけ宣言する方法。
一つ目は全てのデータの値を用意しないといけなかったけど、こちらは何も値を入れないということも可能。
int [] Hairetsu = new int [3];
これも配列のところで見たコード。
上のコードは「3つ」のデータの数を入力することが可能ということ。
もしHairetsu[2]=35;とだけ書かれていたら「3つ目」のデータが「35」ということ。
一つ目のコードに書き換えると以下のようになる。
int [] Hairetsu ={0,0,35};
値を定義しなかったところは0という数字が入る。
この場合の0はデータが入ってないことを示している。
2次元配列・多次元配列
2次元配列についても配列と同様。
- 変数の型 [][] 変数名 = {{必要な数だけ値を入力},{必要な数だけ値を入力}};
- 変数の型 [][] 変数名 = new 変数の型 [必要なデータの数][必要なデータの数];
[]が一つ増えただけで、考え方は一緒。
一つ目については二次元配列の記事でまとめていなかった。
以下のコードを作ってみた。
仮にABCD[0][2]とあったとする。
一番外側の{}の中に{}が更に2つ存在している。
この内側の{}の数が最初の[]の数字と関係している。
データは「0」から数えるから、最初の{}が「0」、二つ目の{}が「1」となる。
最初の[]の数字は「0」だから「ABCD[0][2]」とは一つ目の{}内の「5,10,15,20」のどれかの数字ということ。
2つめが[2]となっているから、3つ目の数字が該当する。
3つ目の数字は「15」。よって「ABCD[0][2]」は「15」となる。
{}の数に注目。
後、データを数えるときは0からということに注意。
ABCD[0][0]=5 ABCD[0][1]=10 ABCD[0][2]=15 ABCD[0][3]=20
ABCD[1][0]=25 ABCD[1][1]=30 ABCD[1][2]=35 ABCD[1][3]=40
ABCD[1][4]=45 ABCD[1][5]=50
二つ目も、配列ができていれば簡単。
int [][] Nijigen= new int[3][4];
こちらのコードは{}が3つあり、それぞれ4つのデータがあるということ。
一つ目のコードに置き換えると、暫定的には以下のようになる。
int [][] Nijigen={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
「1,2,3・・・」はただ4つづつ数字を入れてみただけ。
「17」だったり「55」だったりとなんでもOK。
ただ、int [][] Nijigen= new int[3][4];の場合は全部の値を決めなくてもいい。
もしNijigen[2][2]=17;とあったら3つめの{}内かつ、3つめの数字の「11」の部分には「17」が入っているということ。
「int [][] Nijigen= new int[3][4];」は全ての数字の設定は不要だが、Nijigen[2][2]=17;のように設定しなければ、値は空っぽということで「0」が表示される。
int [][] Nijigen2= new int[3][4];
System.out.println(Nijigen2[0][3]);
この場合、Nijigen2[0][3]の値は事前に何も設定していないから「0」となる。
配列の構文のポイント
二次元配列・多次元配列のところで見てきた以下の構文について、ポイントがある。
- 変数の型 [][] 変数名 = {{必要な数だけ値を入力},{必要な数だけ値を入力}};
- 変数の型 [][] 変数名 = new 変数の型 [必要なデータの数][必要なデータの数];
1つ目の構文は、{}の数は自由だが、{}の中のデータの数もそれぞれ自由。
どういうことかというと・・・
int [][] ABCD ={{1,3,5},{7},{9,11,13,15,17}};
上のような書き方が可能。
1つ目の{}内には3つ、2つ目の{}内には1つ、3つ目の{}内には5つのデータが入っている。
ただ、2つ目の構文は、それぞれの{}が同じデータの数を持っていることになる。
int [][] EFGH= new int[5][3];
この場合、{}は5つ、それぞれの{}内にデータが3つづつ入っているということ。
1つ目の構文に書き換えると、以下のようになる。
int [][] EFGH= {{a,b,c},{d,e,f},{g,h,i},{j,k,l},{m,n,o}};
intが使われているから、アルファベットのところには実際は整数が入る。
ただ、データが定義されていない場合、「0」が入る。
ちょっとした注意点
int [][] ABCD ={{1,3,5},{7},{9,11,13,15,17}};
この時にもしABCD[1][2]と指定してもエラーが出る。
なぜなら、[1]は二つ目の{}、[2]は{}内の3つ目の数字を指定している。
二つ目の{}内には「7」という数字しかないため、3つ目の数字というのは存在しない。
よってABCD[1][0]しか指定できない。
指定できないものを表示させようとするとエラー。
データの数え間違いに注意してね。
私は何回も間違えたよ。
最後に
多次元配列についての新しいことというか、「int [][] ABCD ={{5,10,15,20,},{25,30,35,40,45,50}};」という形や「int [][] ABCD ={{1,3,5},{7},{9,11,13,15,17}};」という形についてまとめていなかった。
そのことに今更ながら気づいたから復習もかねて配列についてまとめた。
だいぶ配列のこと忘れてたから良かった。
コメント