teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

スタックトレースから再帰

2017/04/16 10:55

投稿

swordone
swordone

スコア20675

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);`なので、再帰となって呼び出されている、つまり引数が当初と違う可能性があるということがわかります。