回答編集履歴

2

例外の種類

2016/04/06 02:44

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -28,4 +28,4 @@
28
28
 
29
29
  iが0でないので`arr[i] = i++;`が実行。arr[2]にi(=2)を代入し、**iを1増やす(i=3になる)。**
30
30
 
31
- `str += arr[i];`i=3のためarr[3]にアクセスしようとするが、長さ3の配列にインデックス3は存在しないため、IndexOutOfBoundsException発生。
31
+ `str += arr[i];`i=3のためarr[3]にアクセスしようとするが、長さ3の配列にインデックス3は存在しないため、ArrayIndexOutOfBoundsException発生。

1

実行の流れ

2016/04/06 02:44

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -7,3 +7,25 @@
7
7
  結果、elseを抜けたあとの`str += arr[i];`で**arr[3]**にアクセスしようとします。
8
8
 
9
9
  しかしarrは長さ3で、インデックス3はないため例外となります。
10
+
11
+
12
+
13
+ ---
14
+
15
+ 最初からfor文の動きを追うと…
16
+
17
+ arrayから最初の配列array[0]をarrとして扱い、ループ開始
18
+
19
+ 新たな空のStringを生成
20
+
21
+ i=0でループ開始、arr.lengthは3より小さいのでループに入る
22
+
23
+ i=0なので`arr[i] = ++i;`を実行、arr[0]に、**iを1増やし(i=1になる)**その結果が代入される。
24
+
25
+ `str += arr[i];`i=1なので、strにarr[1]、つまりデフォルトの0が文字列化され追加される
26
+
27
+ i++でiは1増加し2になる。arr.lengthの3より小さいのでループ続行
28
+
29
+ iが0でないので`arr[i] = i++;`が実行。arr[2]にi(=2)を代入し、**iを1増やす(i=3になる)。**
30
+
31
+ `str += arr[i];`i=3のためarr[3]にアクセスしようとするが、長さ3の配列にインデックス3は存在しないため、IndexOutOfBoundsException発生。