2012-04-19 1197 views
2

我遇到了無限遞歸的問題。主要方法將運行,然後如果我選擇1,它將進入子菜單()。但是,當我在子菜單()中選擇一個錯誤的選項時,程序必須循環回主方法。如何解決java中的無限遞歸(堆棧溢出)?

但是,這種情況會導致堆棧溢出。

你有什麼想法傢伙有關這個問題?如何在不調用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

解決方法:不使用遞歸在這裏,因爲它會好得多簡單地使用while循環。 – 2012-04-19 15:35:41

+1

你已經有一個在主菜單..所以爲什麼不只是返回? 而不是主要()返回? – 2012-04-19 15:38:22

+0

考慮讓你的subMenu方法返回一個值,它可以像布爾型一樣簡單,讓調用代碼知道它是否成功,如果不是,那麼繼續使用while循環。 – 2012-04-19 15:44:07

回答

4

你並不需要調用main()返回的主要方法,從方法返回,你說return <vairable>,或者如果該方法返回void類型,需要在年底不歸路方法。如果您想從不是方法結尾的地方返回,則仍可以說return

所以在上面的例子中,switchsubMenu方法中的最後一個元素,所以在切換之後,方法結束了,所以返回。只要刪除電話main()

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

+0

感謝諾埃爾的答案。這非常有幫助。 – 2012-04-19 16:42:38

+0

感謝大家的幫助。我在Java新手。 – 2012-04-19 16:46:56

+0

@ivanangelo如果這個答案解決了你的問題,你應該[接受它](http://meta.stackexchange.com/a/5235/158402)。 – 2012-05-09 04:37:10