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
 
  
  
  
  

コメント