配列さえ表現するのは難しい
映画館の小劇場があります。座席は1列に5座席ありそれが5列あります。座席の予約状況を変数で表現すると次のような感じになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package step07; public class Array1 { public static void main(String[] args) { int ON = 1; //予約あり int OFF = 0;//予約なし int[] yoyaku = { ON ,ON ,OFF,OFF,OFF, //1列目 ON ,OFF,ON ,ON ,ON , //2列目 OFF,OFF,ON ,ON ,OFF, //3列目 OFF,OFF,OFF,OFF,ON , //4列目 ON ,OFF,ON ,ON ,ON };//5列目 //2列の左から3番目の席 System.out.println(yoyaku[(2-1)*5+(3-1)]); } } |
2列の左から3番目の席は、(2-1)列×5+(3-1)番目(配列は0番目から始まるので1を引く)で、yoyaku[7]が該当することになります。しかしこれでは人の座席のイメージとyoyaku[7]では結びつきにくいですね。このような情報を表現するために2次元配列があります。
二次元配列
2次元配列を使うと次のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package step07; public class Array1 { public static void main(String[] args) { int ON = 1; //予約あり int OFF = 0;//予約なし int[][] yoyaku = { {ON ,ON ,OFF,OFF,OFF }, //1列目 {ON ,OFF,ON ,ON ,ON }, //2列目 {OFF,OFF,ON ,ON ,OFF }, //3列目 {OFF,OFF,OFF,OFF,ON }, //4列目 {ON ,OFF,ON ,ON ,ON } //5列目 }; //2列の左から3番目の席 System.out.println(yoyaku[2-1][3-1]); } } |
まず注目して頂きたいのが17行目の「yoyaku[2-1][3-1]」です。
17 |
System.out.println(yoyaku[2-1][3-1]); |
これは2列目の左から3番目の席を表示しています。変数yoyakuの右側に[][]がありますが、それぞれ列、何番目に対応します。つまりyoyaku[4-1][5-1]なら4列目の左から5番目を示しています。(1を引いているのは配列は0番目から開始するためです)
イメージしづらい場合は表計算を思い出してください。
A列の縦にしかデータが無い場合は「4行目」の一つの情報で「999」を示すことができます。
縦、横にデータがある場合は、「Aの4」と横、縦の情報で「999」を示します。これと同様で二次元配列も[]を2つ用意して示すことになります。
初期化
2次元配列の初期化方法をみていきます。
9 10 11 12 13 14 15 |
int[][] yoyaku = { {ON ,ON ,OFF,OFF,OFF }, //1列目 {ON ,OFF,ON ,ON ,ON }, //2列目 {OFF,OFF,ON ,ON ,OFF }, //3列目 {OFF,OFF,OFF,OFF,ON }, //4列目 {ON ,OFF,ON ,ON ,ON } //5列目 }; |
{}の中に複数の{}がある構造です。
10行目の{ON ,ON ,OFF,OFF,OFF}が1列目の座席を意味しており、
yoyaku[0][0],yoyaku[0][1],yoyaku[0][2],yoyaku[0][3],yoyaku[0][4]に対応します。
11行目の {ON ,OFF,ON ,ON ,ON }は
yoyaku[1][0],yoyaku[1][1],yoyaku[1][2],yoyaku[1][3],yoyaku[1][4]にそれぞれ対応していきます。