5章8

この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. }
Enter fullscreen mode
Exit fullscreen mode

解説:

  1. 行目: 2次元配列arrayを宣言しています。この配列には3つの要素があります。最初の要素は2つの文字列”A”と”B”を持つ配列、2番目の要素はnull(何も参照していない)、3番目の要素は3つの文字列”C”、”D”、”E”を持つ配列です。

  2. 行目: total変数を宣言し、0で初期化しています。この変数は配列の各要素の長さの合計を保持するために使います。

5-7. 行目: 拡張forループを使用して、2次元配列arrayの各要素に対してループを実行します。tmpは配列arrayの各要素、つまりString型の配列を参照します。

  1. 行目: totaltmp配列の長さを加算します。ここで注意が必要なのは、もしtmpnullを参照している場合、tmp.lengthはNullPointerExceptionを引き起こすということです。

  2. 行目: ループが終了した後、合計した長さtotalが出力されます。

このコードの場合、NullPointerExceptionが発生します。なぜなら、配列arrayの2番目の要素がnullであり、それにアクセスして.lengthを呼び出すときに例外がスローされるからです。このため、正しい答えはE「実行時に例外がスローされる」です。このコードはtmpnullでないことを確認せずに.lengthを呼び出しているため、2番目の要素でエラーが発生します。

もしコードが正常に実行されるように修正したければ、nullチェックを追加する必要があります。例えば:

5. for (String[] tmp : array) {
6. if (tmp != null) {
7. total += tmp.length;
8. }
9. }
Enter fullscreen mode
Exit fullscreen mode

この修正により、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.

Leave a Comment

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

Discover more from Coursity

Subscribe now to keep reading and get access to the full archive.

Continue reading

Scroll to Top
Eu amd epyc servers. Instructions, to deploy the website on a docker container using portainer or just using docker commands. Get ready to elevate your gatherings and create an electrifying atmosphere with our mini sound activated party lights.