ここでは 「現場で本当に起こりやすいミス」だけを集めた、“バグ修正形式” の実務風応用問題セット(10 問) を紹介します。
初心者〜中級者がハマりやすいポイントを中心にしています。
すべて 「誤ったコード → 何が問題か? → 正しいコード」 のセットです。
模範解答つき。
- 問題 1:toString のつもりで println を使ってしまう
- 問題 2:多次元配列に toString を使っている
- 問題 3:deepToString を 1次元配列に使ってしまう(コンパイルエラー)
- 問題 4:import を忘れてコンパイルエラーになる
- 問題 5:null が混じった多次元配列の出力
- 問題 6:ログ出力で配列をそのまま + 連結してしまう
- 問題 7:配列の中の文字列を連結しようとして誤用
- 問題 8:3次元配列を toString で出力しようとしている
- 問題 9:List と配列を混同している(実務で非常に多い)
- 問題 10:配列をログ出力しようとして NPE を起こす可能性
- 解答 1
- 解答 2
- 解答 3
- 解答 4
- 解答 5
- 解答 6
- 解答 7
- 解答 8
- 解答 9
- 解答 10
問題 1:toString のつもりで println を使ってしまう
int[] nums = {1, 2, 3};
System.out.println(nums); // 中身が出ると思っていた…
Java修正せよ。
問題 2:多次元配列に toString を使っている
int[][] data = {
{1, 2},
{3, 4}
};
System.out.println(Arrays.toString(data));
Java正しく全要素を表示するコードに直せ。
問題 3:deepToString を 1次元配列に使ってしまう(コンパイルエラー)
int[] arr = {10, 20, 30};
System.out.println(Arrays.deepToString(arr));
Java正せ。
問題 4:import を忘れてコンパイルエラーになる
int[] a = {5, 6, 7};
System.out.println(Arrays.toString(a));
Java必要な修正をせよ(コードも書く)。
問題 5:null が混じった多次元配列の出力
String[][] words = {
{"apple", "banana"},
null,
{"cat", "dog"}
};
System.out.println(Arrays.toString(words));
Java全ての要素を確実に表示できるようにせよ。
問題 6:ログ出力で配列をそのまま + 連結してしまう
int[] scores = {80, 90, 70};
System.out.println("Scores: " + scores);
Java中身が表示されるように修正せよ。
問題 7:配列の中の文字列を連結しようとして誤用
String[] names = {"taro", "jiro", "hanako"};
System.out.println("Users=" + names.toString());
Java修正せよ。
問題 8:3次元配列を toString で出力しようとしている
int[][][] cube = new int[2][2][2];
System.out.println(Arrays.toString(cube));
Java全階層の要素を見える形に直せ。
問題 9:List と配列を混同している(実務で非常に多い)
List<String> items = Arrays.asList("A", "B", "C");
System.out.println(Arrays.toString(items)); // エラーではないが…
Java正しい出力方法に修正せよ。
問題 10:配列をログ出力しようとして NPE を起こす可能性
String[] data = getData(); // null かもしれない
System.out.println(Arrays.toString(data));
JavaNPE を防ぐための安全な書き方に直せ。
解答 1
System.out.println(Arrays.toString(nums));
Java解答 2
System.out.println(Arrays.deepToString(data));
Java解答 3
System.out.println(Arrays.toString(arr));
Java解答 4
import java.util.Arrays;
int[] a = {5, 6, 7};
System.out.println(Arrays.toString(a));
Java解答 5
System.out.println(Arrays.deepToString(words));
Java解答 6
System.out.println("Scores: " + Arrays.toString(scores));
Java解答 7
System.out.println("Users=" + Arrays.toString(names));
Java解答 8
System.out.println(Arrays.deepToString(cube));
Java解答 9
List をそのまま引数に渡しても意味が違う。
System.out.println(items);
// または
System.out.println(items.toString());
// ※ List は toString が中身を展開してくれる
Java解答 10
if (data == null) {
System.out.println("data is null");
} else {
System.out.println(Arrays.toString(data));
}
Java実務では Objects.toString を使うことも多い:
System.out.println(Objects.toString(Arrays.toString(data), "null"));
Java