Java | 多次元配列(2次元配列)の作り方と使い方

Java Java
スポンサーリンク

配列の可視化(ASCII 表示)とは?

2次元配列を 「表(テーブル)」 のようにして、

+----+----+----+
| 87 | 54 | 67 |
+----+----+----+
| 76 | 92 | 48 |
+----+----+----+

のように表示する方式です。

文字だけで“表”が見えるので、デバッグにも便利です。


仕組み(簡単なイメージ)

  • 行の上に「横罫線」を引く
  • 各要素を "| 値 " のように囲って並べる
  • 行を閉じるときにまた横罫線を引く

最も簡単なバージョン(固定幅)

まずは簡単な 5 行ほどのコードで表を表示する例です。

サンプルコード(初心者向け)

int[][] a = { {87, 54, 67}, {76, 92, 48} };

for (int i = 0; i < a.length; i++) {
    System.out.println("+----+----+----+"); // 枠線
    for (int j = 0; j < a[i].length; j++) {
        System.out.print("| " + a[i][j] + " ");
    }
    System.out.println("|"); // 行の最後を閉じる
}
System.out.println("+----+----+----+");
Java

出力結果

+----+----+----+
| 87 | 54 | 67 |
+----+----+----+
| 76 | 92 | 48 |
+----+----+----+

固定幅のため、値が2桁前提ですが、見た目は簡単でわかりやすいです。


レベルアップ版:幅を自動調整する「汎用 ASCII テーブル表示メソッド」

値の桁数に合わせて列幅を自動調整する、実用的な方法を紹介します。

完全コード

public class AsciiTable {

    public static void printTable(int[][] table) {
        // 1. 各列の最大幅を調べる
        int cols = table[0].length;
        int[] colWidths = new int[cols];

        for (int j = 0; j < cols; j++) {
            int max = 0;
            for (int i = 0; i < table.length; i++) {
                int len = String.valueOf(table[i][j]).length();
                if (len > max) max = len;
            }
            colWidths[j] = max;
        }

        // 2. 横線を作る関数(ラムダ式)
        Runnable printLine = () -> {
            for (int w : colWidths) {
                System.out.print("+");
                for (int k = 0; k < w + 2; k++) System.out.print("-");
            }
            System.out.println("+");
        };

        // 3. 表の出力
        for (int i = 0; i < table.length; i++) {
            printLine.run(); // 行の上の線
            for (int j = 0; j < cols; j++) {
                String value = String.valueOf(table[i][j]);
                System.out.print("| " + padRight(value, colWidths[j]) + " ");
            }
            System.out.println("|");
        }
        printLine.run(); // 最後の線
    }

    // 右にスペースを入れて幅を揃える
    private static String padRight(String s, int width) {
        StringBuilder sb = new StringBuilder(s);
        while (sb.length() < width) sb.append(" ");
        return sb.toString();
    }

    // 動作確認用 main
    public static void main(String[] args) {
        int[][] nums = {
            {1, 200, 3},
            {4567, 8, 90},
            {12, 345, 6789}
        };

        printTable(nums);
    }
}
Java

出力結果

+------+-----+------+
| 1    | 200 | 3    |
+------+-----+------+
| 4567 | 8   | 90   |
+------+-----+------+
| 12   | 345 | 6789 |
+------+-----+------+

どんな桁数でもキレイに整列します。


ジャグ配列(列数がバラバラ)にも対応させたい?

もし必要なら、次のような配列にも対応可能です:

int[][] a = {
    {1},
    {10, 20, 30},
    {7, 8}
};
Java

要望があれば、列数が行ごとに違う配列にも対応する汎用版 を作ります。


おまけ:超コンパクト版(ワンメソッド)

static void simpleAscii(int[][] t) {
    for (int[] row : t) {
        System.out.println("+----------------------------+");
        System.out.print("| ");
        for (int v : row) System.out.print(v + " ");
        System.out.println("|");
    }
    System.out.println("+----------------------------+");
}
タイトルとURLをコピーしました