配列の出力の基本とコツ
配列をそのまま出力すると「中身」ではなく「場所の情報」が表示されます。中身を見たいときは専用メソッドを使うのが近道です。初心者がつまずきやすいポイントを、例題で丁寧に解説します。
一次元配列の出力
そのまま出すとよくわからない表示になる
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] ← 中身ではなく「内側の配列の参照」
JavadeepToString なら入れ子の中身まで表示できる
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[])を作って、
toStringとdeepToStringの違いを試す
解答例と解説
課題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[])を作って、toString と deepToString の違いを試す
解答例:
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;
