• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ネストしたメソッドにおける変数のスコープ)

ネストしたメソッドでの変数のスコープについて

このQ&Aのポイント
  • ネストしたメソッドにおける変数のスコープについて調べましたが、返り値が反映されない問題があります。
  • 変数に代入するとうまく動作するようですが、原因はスコープにありますか?
  • コメントアウトしているif文の中をi = nest(i); にすると、想定通りの結果が得られます。

質問者が選んだベストアンサー

  • ベストアンサー
  • utun01
  • ベストアンサー率40% (110/270)
回答No.2

そもそも戻り値を使っていないからでしょう。 if(i<5) { nest(i); } では、nest()を呼び出しても、戻り値を何処にも入れていません。 再帰処理では、再帰される毎に別のメモリ空間が使われますので、アドレス参照しているもの以外は引き継がれません。

wanwalker
質問者

補足

javaで再帰される毎に別のメモリ空間が使われていたことは知りませんでした。スクリプト言語では気にしていなかったのですが、C言語に近い挙動なんですね!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

#2 では「再帰」って言ってるけど, 実際には再帰に限らずメソッドを呼び出すごとに別のメモリ領域を使います. たとえば (適当なクラスの中で) static void main(String [] args) { foo(3); } static void foo(int n) { int i; for (i = 0; i < n; ++i) { bar(i); } } static void bar(int n) { int i = 2*n+5; System.out.println("i = " + i); } としたらどのような動作をして何が出力されるかわかりますか?

wanwalker
質問者

補足

javaで再帰されるごとに同名の別のメソッドを呼び出していたのは知りませんでした。メソッド内で定義された変数のスコープはメソッド内に限られることは知っていたのですが、再帰すると、恐らくスタックメモリのような別のメモリ空間を使用していたのは知りませんでした。javaはまだ始めたばかりなので、もう少し頑張ろうと思います。

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

何を期待してる?

wanwalker
質問者

補足

nest:5 iを1つずつ加え、i:5も出力もしているのに、mainに戻すと1が出力されます。iに毎回代入していくと、5が戻るのですが、どうしてでしょうか?まるで、iが2つあるかのようです。

すると、全ての回答が全文表示されます。

関連するQ&A