配列を利用することで複数の値を扱うことができます。多次元配列を利用すれば、さらに多くのデータを改装に分けて管理することができます。イメージとしては、学校のクラスのようなものです。今回は多次元配列についてわかりやすく説明します。
1次元配列に関してはこちらを参考にしてください。
多次元配列
1次元配列(配列とコマンドライン引数)で複数の値を一度に扱う方法について説明しました。
実務上扱う値はもっと多く、値の中でも階層に分かれていることが多くあります。
今回は多次元配列の中でも利用することが多い2次元配列について説明します。
多次元配列とは
- int [ ] [ ] scores = new int [ 3 ] [ 5 ] ;
- scores [ 0 ] [ 0 ] = 50 ;
- scores [ 2 ] [ 3 ] = 65 ;
まず配列の宣言で名前と型、行数・列数を指定します。次に [ ] [ ] で配列の宣言をします。2つ並んでいるので2次元配列となります。
new で新規の配列をつくって [ 3 ] [ 5 ] のように [ ] の中に要素数を記述します。
縦と横、行と列の指定をしてください。3行と5列の入れ物を用意する、ということを意味します。
個々の要素にアクセスするためには次のように記述します。
scores [ 0 ] [ 0 ] = 50 ;で1行目の1列目にアクセスするということです。
そして50を代入します。
scores [ 2 ] [ 3 ] = 65 ;で3行目の4列目にアクセスして65を代入します。
このように個々の要素を1つずつ箱の中に値を代入していくことが可能ですが、少し面倒です。
なので次のように最初から宣言も含めて一気に初期化することもできます。
多次元配列の初期化の記述方法
- 初期化
- int [ ] [ ] Scores = { { 50, 55, 70, 65, 80 } ,
- { 60, 77, 90, 73, 55 } ,
- { 66, 85, 76, 95, 98 } } ;
- 個別の要素を指定して表示
- System . out . println ( scores [ 1 ] [ 2 ] ) ; // 90
- scores [ 0 ] [ 0 ] から scores [ 2 ] [ 4 ] まで3×5=15個の要素が使える
初期化で値の代入をします。1次元配列よりは少し複雑になります。
{ }の中にさらに{ }でその中に値を記述します。
個々の値は ,(カンマ)で区切ります。{ }も ,で区切ります。
{ }の中に1行ずつの値を入れていきます。
最後に;(セミコロン)忘れずに書いてください。
System . out . println ( scores [ 1 ] [ 2 ] ) は2行目の3列目の入れ物の中の値を出力するということです。箱の中身は90です。
多次元の要素数の参照
- 要素数
- int [ ] [ ] scores = new int [ 3 ] [ 5 ] ;
- scores . length は 3
- 配列中に配列が入っている
- 要素数3の配列に要素数5の配列がある
- 要素数はいずれも 5
- scores [ 0 ] . length
- scores [ 1 ] . length
- scores [ 2 ] . length
. length を利用することでいくつの要素があるのかを調べることができます。
int [ ] [ ] scores = new int [ 3 ] [ 5 ] ; で3行5列の2次元配列を用意しました。
その後にscores . length を記述すると、行の数である3が出力されます。
列よりも行の方が優先されます。
では列の数を知りたいときにはどのように記述すれば良いのでしょうか。
scores [ 0 ] . length で1行目の要素数を知ることができます。
このような形で、行と列の要素の数を知ることが可能です。
練習(配列の中身の取り出し)
▶多次元配列の中身を表示するプログラムです。
初期化をした後に for 文を回しながら中身を表示していきます。
2次元の配列なので、2つの for 文をネストで利用します。
ループ処理のネストに関してはこちらを参考にしてください。
- class ScoresView {
- public static void main ( String [ ] args ) {
- int [ ] [ ] Scores = { { 50, 55, 70, 65, 80 } ,
- { 60, 77, 90, 73, 55 } ,
- { 66, 85, 76, 95, 98 } } ;
- }
- }
- }
外側の for 文は行、入れ子になっている方の for は列を示しています。
変数 i は行の添え字、変数 j は列の添え字で個々の要素へのアクセスが決まります。
そしてその中身は scores [ i ] [ j ] と出力されます。
最後の System . out . println ( ) ; で改行されます。
プログラムコードは次のようになります。
- class ScoresView {
- public static void main ( String [ ] args ) {
- int [ ] [ ] Scores = { { 50, 55, 70, 65, 80 } ,
- { 60, 77, 90, 73, 55 } ,
- { 66, 85, 76, 95, 98 } } ;
- for ( int i = 0 ; i < 3 ; i ++ ) {
- for ( int j = 0 ; j < 5 ; j ++ ) {
- System . out . print ( i + ” - ” + j + ” : “ + Scores [ i ] [ j ] + ” “ ) ;
- }
- System . out . println ( ) ;
- }
- }
- }
int i = 0 ; i < 3 ;
で変数 i は0~3未満、つまり0,1,2の3回回るということになります。
出力の命令は println ではなく print で同じ行に出力するようにします。
println と print の違いに関してはこちらを参考にしてください。
そして中の for 文が1回回ったら System . out . println ( ) ;の出力で改行します。
改行したら今度は i が1になって2行目の要素が出力されます。
このように回して Scores という配列の中身を添え字付きで出力します。
出力結果は
0-0:50 0-1:55 0-2:70 0-3:65 0-4:80
1-0:60 1-1:77 1-2:90 1-3:73 1-4:55
2-0:66 2-1:85 2-2:76 2-3:95 2-4:98
となります。
まとめ
このように配列、多次元配列を利用することで膨大な量を扱うことができるようになります。データの管理が容易にできるようになり、それを用途に応じて取り出すことができます。