このJavaのコードは2次元配列の各要素(ここでは文字列配列)の長さを合計して出力しています。ただし、コードの解説と答えEに至る理由を以下に説明します。
1. public class Main {
2. public static void main(String[] args) {
3. String[][] array = { { "A", "B" }, null, { "C", "D", "E" } };
4. int total = 0;
5. for (String[] tmp : array) {
6. total += tmp.length;
7. }
8. System.out.println(total);
9. }
10. }
解説:
行目: 2次元配列
array
を宣言しています。この配列には3つの要素があります。最初の要素は2つの文字列”A”と”B”を持つ配列、2番目の要素はnull
(何も参照していない)、3番目の要素は3つの文字列”C”、”D”、”E”を持つ配列です。行目:
total
変数を宣言し、0で初期化しています。この変数は配列の各要素の長さの合計を保持するために使います。
5-7. 行目: 拡張forループを使用して、2次元配列array
の各要素に対してループを実行します。tmp
は配列array
の各要素、つまりString型の配列を参照します。
行目:
total
にtmp
配列の長さを加算します。ここで注意が必要なのは、もしtmp
がnull
を参照している場合、tmp.length
はNullPointerExceptionを引き起こすということです。行目: ループが終了した後、合計した長さ
total
が出力されます。
このコードの場合、NullPointerExceptionが発生します。なぜなら、配列array
の2番目の要素がnull
であり、それにアクセスして.length
を呼び出すときに例外がスローされるからです。このため、正しい答えはE「実行時に例外がスローされる」です。このコードはtmp
がnull
でないことを確認せずに.length
を呼び出しているため、2番目の要素でエラーが発生します。
もしコードが正常に実行されるように修正したければ、null
チェックを追加する必要があります。例えば:
5. for (String[] tmp : array) {
6. if (tmp != null) {
7. total += tmp.length;
8. }
9. }
この修正により、null
の要素を無視して他の要素の長さを合計することができ、NullPointerExceptionを避けられます。修正後のコードでは、”A”と”B”が2つ、”C”、”D”、”E”が3つ、合わせて5つの要素があるので、出力は5になります。しかし、元の質問のコードではこのようなチェックがないため、答えはEです。
Discover more from Coursity
Subscribe to get the latest posts sent to your email.