Java | 多次元配列(2次元配列)

Java Java
スポンサーリンク

発展課題:ファイルからデータを読み込んで 2 次元配列として扱う

ここでは初心者が「配列 × ファイル入出力」を練習できるように、超わかりやすく・実務にもつながる形でまとめます。

実務では CSV(カンマ区切りのテキスト)を読み込んで表データとして扱う ことが非常に多いです。

ここでは次のような CSV ファイルを読み込み、2 次元配列に格納して合計や平均を計算する課題に挑戦しましょう。


1. 使用するファイル(scores.csv)

78,64,59
58,92,82
90,75,88
  • 3 行 × 3 列
  • 生徒のテスト点数をイメージできます

2. やることの流れ

初心者でもわかるようにステップ式で

  1. ファイルを 1 行ずつ読む
  2. 読んだ行を「カンマで分割」する
  3. 数値に変換する
  4. 可変長の 2 次元リストに入れる(いったん ArrayList で受ける)
  5. すべて読み終わったら int[][] に変換
  6. 合計・平均などを計算して出力

→ 実務でもこの流れです!


3. フルコード(初心者向け解説コメント付き)

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class ReadCsvToArray {
    public static void main(String[] args) {

        // CSVファイルのパス(同じフォルダに置いた場合)
        String path = "scores.csv";

        // とりあえず ArrayList<int[]> に行ごとに入れる
        List<int[]> rows = new ArrayList<>();

        try (BufferedReader br = new BufferedReader(new FileReader(path))) {

            String line;
            while ((line = br.readLine()) != null) {

                // 1行をカンマで分割 → {"78","64","59"}
                String[] parts = line.split(",");

                // String → int に変換する
                int[] nums = new int[parts.length];
                for (int i = 0; i < parts.length; i++) {
                    nums[i] = Integer.parseInt(parts[i]);
                }

                // 1行分の配列を追加
                rows.add(nums);
            }

        } catch (IOException e) {
            System.out.println("ファイル読み込みエラー: " + e.getMessage());
            return;
        }

        // List<int[]> → int[][] へ変換
        int[][] data = new int[rows.size()][];
        for (int i = 0; i < rows.size(); i++) {
            data[i] = rows.get(i);
        }

        // --- 読み込んだデータの確認 ---
        System.out.println("読み込んだデータ:");
        for (int[] row : data) {
            for (int v : row) {
                System.out.print(v + " ");
            }
            System.out.println();
        }

        // --- 合計と平均 ---
        System.out.println("\n行ごとの合計と平均:");
        for (int i = 0; i < data.length; i++) {
            int sum = 0;
            for (int v : data[i]) {
                sum += v;
            }
            double avg = sum / (double) data[i].length;

            System.out.printf("行 %d → 合計=%d, 平均=%.2f%n", i, sum, avg);
        }
    }
}
Java

出力例

読み込んだデータ:
78 64 59 
58 92 82 
90 75 88 

行ごとの合計と平均:
行 0 → 合計=201, 平均=67.00
行 1 → 合計=232, 平均=77.33
行 2 → 合計=253, 平均=84.33

4. 初心者がここで身につくこと

この課題をやると、実務に必要な重要スキルが一気に身につきます。

✔ 2次元配列の理解

int[][] の構造、arr[i][j] の操作など。

✔ ファイル入出力(IO)の基本

BufferedReader / FileReader の使い方。

✔ split での文字列処理

CSV の基本処理。

✔ List × 配列 の組み合わせ

長さが事前にわからない表データを扱うときの定番パターン。

✔ 例外処理(try-with-resources)

Java の IO 処理の基本形。


5. 発展課題 ①:不揃い(jagged)CSV の読み込み

行によって列数が違うファイルを読み込んで、そのまま jagged 配列(int[][])として扱ってみましょう。

例:

100,200
30,40,50
90

6. 発展課題 ②:転置(行列の入れ替え)

読み込んだ CSV の 2 次元配列を

row → column
column → row

へ変換するメソッドを作る。


7. 発展課題 ③:最大値・最小値・中央値を求める

読み込んだデータの統計値を表示する。


8. 発展課題 ④:CSV ファイルへ書き出す

読み込んだ 2 次元配列を別の CSV ファイルへ書き戻す。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました