2次元配列とは
int型の配列には要素として整数が入っている、
[int型配列]
int[] data={
2,
3,
4,
};
String型の配列には要素として文字列が入っている
[String型の配列]
String[] data={
"John",
"Paul",
"George",
"Ringo",
};
そして要素として配列が入っているのが2次元配列だ。
[int型の2次元配列]
int[][] data={
{1,2,3},
{4,5,6},
};
今回はこの2次元配列についての理解を深めよう。
2次元配列の宣言と初期化
1. 配列の宣言
// 型[][] 配列名 = new 型[行数][列数];
int[][] data = new int[3][2];
/*
{
{0,0},
{0,0},
{0,0}
}
*/
[3]
→ 行数(縦方向のサイズ)[2]
→ 列数(横方向のサイズ)
一般にこのような2次元配列を3行2列の2次元配列と呼ぶ
2. 宣言と同時に初期値を設定する
int[][] data = {
{1, 2},
{3, 4},
{5, 6}
};
要素のアクセスと変更
2次元配列の要素にアクセスするときは、行番号 と 列番号 を指定する。
配列は 0から始まる ので注意!
要素のアクセス
System.out.println(data[0][1]); // 2
要素の変更
data[2][0] = 10;
/*
{
{1, 2},
{3, 4},
{10, 6}
}
*/
配列の走査
for文
public class Main {
public static void main(String[] args) {
int[][] arr = {
{1, 2},
{3, 4},
{5, 6}
};
// 2重for文
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println(); // 行ごとに改行
}
}
}
出力結果
1 2
3 4
5 6
拡張for文
public class Main {
public static void main(String[] args) {
int[][] arr = {
{1, 2},
{3, 4},
{5, 6}
};
// 拡張for文
for (int[] ar : arr) {
for (int n : ar) {
System.out.print(n+ " ");
}
System.out.println();
}
}
}
出力結果
1 2
3 4
5 6
不規則な2次元配列(ジャグ配列)
列のサイズが揃っていない2次元配列をジャグ配列という。
宣言と初期化
int[][] arr= new int[3][];
arr[0] = new int[]{1, 2};
arr[1] = new int[]{3};
arr[2] = new int[]{4, 5, 6};
for文での走査
走査はジャグでない2次元配列と同じ。
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
出力結果
1 2
3
4 5 6
まとめ
- 2次元配列 は行と列で構成されたデータ構造。
- 宣言時に
[行数][列数]
を指定。 - データを格納・取得するには
[行番号][列番号]
を使用。 - 不規則な配列(ジャグ配列) にも対応できる。
2次元配列を理解することで、データを整理して効率的に扱えるようになる、ゲームのマップなどにも多用される大事な概念だ。
例題
- 3行3列のint型2次元配列を作成し、要素として1~9のランダムな値を格納せよ。
- 以下のようなフォーマットで出力せよ
[6, 3, 5]
[8, 7, 6]
[1, 9, 5]
[解答例]
import java.util.Arrays;
public class Main{
public static void main(String[] args){
int[][] data = new int[3][3];
for(int i=0;i<data.length;i++) {
for(int j=0;j<data[i].length;j++) {
data[i][j] = new java.util.Random().nextInt(9)+1;
}
}
for(int[] row : data) {
System.out.println(Arrays.toString(row));
}
}
}
発展
クラス数、クラスの人数、それぞれの点数をキーボードから入力し、表を出力する処理をint型2次元配列を使って作成せよ。
[実行結果]
クラスの数>>2
1組のクラスの人数>>3
1組1人目の点数>>20
1組2人目の点数>>60
1組3人目の点数>>30
2組のクラスの人数>>4
2組1人目の点数>>90
2組2人目の点数>>70
2組3人目の点数>>30
2組4人目の点数>>45
--表出力--
1組 20 60 30
2組 90 70 30 45
コメント