Java | 配列の文字列表示

Java Java
スポンサーリンク

配列の出力の基本とコツ

配列をそのまま出力すると「中身」ではなく「場所の情報」が表示されます。中身を見たいときは専用メソッドを使うのが近道です。初心者がつまずきやすいポイントを、例題で丁寧に解説します。


一次元配列の出力

そのまま出すとよくわからない表示になる

int[] nums = {10, 20, 30};
System.out.println(nums); // 例: [I@372f7a8d ← 中身ではない(参照情報)
Java

中身を見たいなら Arrays.toString

import java.util.Arrays;

int[] nums = {10, 20, 30};
System.out.println(Arrays.toString(nums)); // [10, 20, 30]
Java
  • ポイント:
    • 一次元配列は Arrays.toString で中身が見える。
    • println(配列) だけではダメ。配列はオブジェクトなので参照情報が出てしまう。

多次元配列(配列の中に配列)の出力

toString では不十分(中身まで辿れない)

import java.util.Arrays;

int[][] matrix = {{1, 2}, {3, 4}};
System.out.println(Arrays.toString(matrix));
// 出力例: [[I@372f7a8d, [I@2f92e0f4] ← 中身ではなく「内側の配列の参照」
Java

deepToString なら入れ子の中身まで表示できる

import java.util.Arrays;

int[][] matrix = {{1, 2}, {3, 4}};
System.out.println(Arrays.deepToString(matrix));
// [[1, 2], [3, 4]]
Java
  • ポイント:
    • 多次元配列は Arrays.deepToString を使う。
    • deepToString は「配列の中に配列がある」構造を 再帰的に たどって中身を文字列化する。

ありがちな間違いと注意点

  • 一次元に deepToString は基本使わない
    • ラベル: deepToString の引数は Object[]
    • 説明: int[]double[] のような「プリミティブ型の一次元配列」は Object[] ではないため、deepToString(int[]) はコンパイルエラー。一次元は toString 一択。
  • 多次元を toString で出さない
    • ラベル: 中身が見えず、参照情報の配列になる。
    • 説明: 「配列の中の配列」それぞれがオブジェクトとして表示されるだけ。中身確認の目的を果たせない。
  • import を忘れない
    • ラベル: Arrays はユーティリティクラス。
    • 説明: 冒頭に import java.util.Arrays; を書かないと使えない。

例題で理解を固める

例題1: テストの点数を出力しよう(一次元)

import java.util.Arrays;

public class Main {
  public static void main(String[] args) {
    int[] scores = {72, 85, 90, 68};
    System.out.println("そのまま: " + scores);                  // 参照情報
    System.out.println("中身: " + Arrays.toString(scores));      // [72, 85, 90, 68]
  }
}
Java
  • 学び: 一次元は Arrays.toString

例題2: 座標のリストを出力しよう(多次元)

import java.util.Arrays;

public class Main {
  public static void main(String[] args) {
    int[][] points = {
      {2, 3},
      {5, 7},
      {11, 13}
    };
    System.out.println("toString: " + Arrays.toString(points));       // [[I@..., [I@..., [I@...]
    System.out.println("deepToString: " + Arrays.deepToString(points)); // [[2, 3], [5, 7], [11, 13]]
  }
}
Java
  • 学び: 多次元は Arrays.deepToString

例題3: 文字列の配列(Object[])の注意

import java.util.Arrays;

public class Main {
  public static void main(String[] args) {
    String[] names = {"Yuki", "Ren", "Aoi"};
    System.out.println(Arrays.toString(names));     // [Yuki, Ren, Aoi]
    System.out.println(Arrays.deepToString(names)); // [Yuki, Ren, Aoi] ← 動くけど一次元なら toString で十分
  }
}
Java
  • 学び: String[]Object[] なので deepToString も使えるが、一次元なら toString が素直。

手を動かす練習(ミニ課題)

  • 課題1: 3科目の点数の配列を作って、中身を1行で表示してみる
    • ヒント int[] scores = {64, 78, 91}; System.out.println(Arrays.toString(scores));
  • 課題2: 3人分の2科目の点数(多次元)を作って、正しく表示する
    • ヒント int[][] scores = { {64, 78}, {91, 85}, {73, 88} }; System.out.println(Arrays.deepToString(scores));
  • 課題3: 自分の好きな単語の配列(String[])を作って、toStringdeepToString の違いを試す

解答例と解説

課題1: 一次元配列の点数を出力

問題: 3科目の点数の配列を作って、中身を1行で表示する

解答例:

import java.util.Arrays;

public class Main {
  public static void main(String[] args) {
    int[] scores = {64, 78, 91};
    System.out.println(Arrays.toString(scores));
  }
}
Java

解説:

  • int[] scores = {64, 78, 91}; で配列を作成。
  • System.out.println(scores); だと参照情報しか出ない。
  • Arrays.toString(scores) を使うと [64, 78, 91] と中身が表示される。
  • 一次元配列は必ず toString を使うのが鉄則。

課題2: 多次元配列の点数を出力

問題: 3人分の2科目の点数(多次元配列)を作って、正しく表示する

解答例:

import java.util.Arrays;

public class Main {
  public static void main(String[] args) {
    int[][] scores = {
      {64, 78},
      {91, 85},
      {73, 88}
    };
    System.out.println(Arrays.deepToString(scores));
  }
}
Java

解説:

  • int[][] scores は「配列の中に配列がある」多次元配列。
  • Arrays.toString(scores) だと [I@... のような参照情報しか出ない。
  • Arrays.deepToString(scores) を使うと [[64, 78], [91, 85], [73, 88]] と中身が見える。
  • 多次元配列は deepToString と覚える。

課題3: 文字列配列の出力

問題: 好きな単語の配列(String[])を作って、toStringdeepToString の違いを試す

解答例:

import java.util.Arrays;

public class Main {
  public static void main(String[] args) {
    String[] words = {"Java", "Array", "Practice"};
    System.out.println(Arrays.toString(words));     // [Java, Array, Practice]
    System.out.println(Arrays.deepToString(words)); // [Java, Array, Practice]
  }
}
Java

解説:

  • String[] はオブジェクト型の配列なので、toString でも deepToString でも同じ結果になる。
  • 一次元なら基本は toString で十分
  • deepToString は「入れ子の配列」を扱うためのものなので、一次元では違いが出ない。

まとめ

  • 一次元配列 → Arrays.toString
  • 多次元配列 → Arrays.deepToString
  • 文字列配列(Object型) → どちらでもOKだが toString が基本

チートシート(覚え方)

  • 一次元配列(int[] など): Arrays.toString(array)
  • 多次元配列(int[][] など): Arrays.deepToString(array)
  • 直接 println は使わない: 参照情報しか出ない
  • import を忘れない: import java.util.Arrays;
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました