発展課題:ファイルからデータを読み込んで 2 次元配列として扱う
ここでは初心者が「配列 × ファイル入出力」を練習できるように、超わかりやすく・実務にもつながる形でまとめます。
実務では CSV(カンマ区切りのテキスト)を読み込んで表データとして扱う ことが非常に多いです。
ここでは次のような CSV ファイルを読み込み、2 次元配列に格納して合計や平均を計算する課題に挑戦しましょう。
1. 使用するファイル(scores.csv)
78,64,59
58,92,82
90,75,88
- 3 行 × 3 列
- 生徒のテスト点数をイメージできます
2. やることの流れ
初心者でもわかるようにステップ式で
- ファイルを 1 行ずつ読む
- 読んだ行を「カンマで分割」する
- 数値に変換する
- 可変長の 2 次元リストに入れる(いったん ArrayList で受ける)
- すべて読み終わったら int[][] に変換
- 合計・平均などを計算して出力
→ 実務でもこの流れです!
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 ファイルへ書き戻す。
