2012-04-19 12 views
2

私は無限再帰に問題があります。メインメソッドが実行され、1を選択すると、サブメニュー()に移動します。しかし、サブメニュー()で間違ったオプションを選択した場合、プログラムはmainメソッドにループバックする必要があります。どのようにJava(スタックオーバーフロー)で無限再帰を解決するには?

ただし、スタックオーバーフローが発生する可能性があります。

この問題に関連するアイディアがありますか?どのようにmain()を呼び出さずにmainメソッドにループバックできますか?

ありがとうございます。

public void main() { 
     // variables omitted 
     while (menu) { 

     switch (option) { 
     case 1: 
      subMenu(); 
      break; 
     } 
     } 

    } 

    public void subMenu() { 
     switch (a) { 
     case 1: 
     case 2: 
     default: 
     System.out.println("Invalid Option"); 
     main(); 
     } 
    } 
+5

ソリューションを見てみましょう。 –

+1

あなたはすでにメインメニューの中にメニューを持っています。 main()の代わりに が返されますか? –

+0

サブメニューメソッドが値を返すことを考慮してください。ブール値と同じくらい単純な値にすることもできます。そうでない場合は、whileループを続行します。 –

答えて

4

あなたはメソッドから戻るために、mainメソッドに戻りますmain()を呼び出す必要はありません、あなたはreturn <vairable>を言う、またはメソッドがvoidの戻り値の型である場合、ノーリターンはの終わりに必要ではありませんメソッド。メソッドの最後ではない場所から戻る場合は、returnと言うこともできます。

上記のケースでは、がsubMenuメソッドの最後の要素なので、切り替え後メソッドは終了します。ちょうどmain()への呼び出しを削除します。単純にwhileループを使用するより良いだろうと、ここで再帰を使用しないでください。

http://docs.oracle.com/javase/tutorial/java/javaOO/returnvalue.html

+0

答えはノエルです。それは非常に役立ちます。 –

+0

助けてくれてありがとう。私はJavaの初心者です。 –

+0

@ivanangeloこの回答があなたの問題を解決した場合は、[同意する]必要があります(http://meta.stackexchange.com/a/5235/158402)。 –

関連する問題