回答編集履歴
1
スタックトレースから再帰
answer
CHANGED
@@ -33,4 +33,13 @@
|
|
33
33
|
つまり、`if (curr.value > value)`はfalseなので、elseブロックに入ります。
|
34
34
|
この中の`return addToRow(curr.right, maxV)`の返り値を得るために、**再帰**します。
|
35
35
|
この時、第1引数に今のCellのright、つまり最初に確認した通り、**null**が渡されてしまいます。
|
36
|
-
再帰したaddToRowメソッドでnullのCellに対し、valueメンバを呼ぼうとしましたが、それはできないよということで、NullPointerExceptionになったのです。
|
36
|
+
再帰したaddToRowメソッドでnullのCellに対し、valueメンバを呼ぼうとしましたが、それはできないよということで、NullPointerExceptionになったのです。
|
37
|
+
|
38
|
+
スタックトレースからも再帰していることが読み取れます。
|
39
|
+
```
|
40
|
+
Exception in thread "main" java.lang.NullPointerException
|
41
|
+
at week08.Tableau.addToRow(Tableau.java:44)
|
42
|
+
at week08.Tableau.addToRow(Tableau.java:54)
|
43
|
+
at week08.Tableau.main(Tableau.java:93)
|
44
|
+
```
|
45
|
+
例外が発生したのは確かに2行目で示されている通り44行目なのですが、それを呼び出したのはその下のスタックトレースで示されている、54行目なのです。これが`return addToRow(curr.right, maxV);`なので、再帰となって呼び出されている、つまり引数が当初と違う可能性があるということがわかります。
|