5章8

RMAG news

この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です。

Leave a Reply

Your email address will not be published. Required fields are marked *