我正在製作一個簡單的基於文本的遊戲。我在我的類中有一個方法引用同一類中的另一個方法,但如果滿足某個條件,該方法會引用引用它的方法。如果該方法引用原始方法,方法可以引用同一類中的方法
所以基本上如果角色選擇打開菜單,則會調用Character.mainMenu()方法,並且該方法根據選擇的內容引用Character.invMenu()或Character.statsMenu()。
如果用戶選擇從mainMenu()中選擇Back,則調用另一個名爲backSetter()的方法。此方法採用當前的x和y座標並返回一個位置ID,以將用戶返回到它們打開菜單的任何位置。
在子菜單方法(由mainMenu()方法調用的方法)作爲invMenu(),還可以選擇返回:1.返回和2.主頁。後退選項將用戶返回到調用mainMenu()方法的主菜單。 Home選項將用戶返回到他們打開菜單的位置,調用backSetter()方法。然而問題是,如果我從invMenu()方法調用這些方法,它們似乎什麼都不做,我的程序就凍結了。
這裏是我的Character類的基本模板(這裏引用的其他類是MainClass,它包含setLocation()方法和引用gameText()方法的GameText類)。
class Character{
static Scanner userInput = new Scanner();
static String choice;
static int backChoice = 0;
public static void backSetter(){
if (xAxis == 0 && yAxis == 0){
backChoice = MainClass.setLocation(0,0);
GameText.gameText(backChoice);
}else if (xAxis == 0 && yAxis == 1){
.....
}
}
public static void mainMenu(){
//My menu options: 1. Inventory, 2. Stats, etc... 5. BACK <- important
choice = userInput.next();
if (choice.equals("1")){
invMenu();
}else if (choice.equals("5")){
backSetter();
}
public static void invMenu(){
// Determines current items in inventory and prints them out
//My menu options: 1. Back, 2. Home <- where the problem happens
choice = userInput.next();
if (choice.equals("1")){
mainMenu();
}else if (choice.equals("2")){
backSetter();
}
}
}
是的,這是完全合法的,將編譯。它被稱爲「間接遞歸」。儘管如此,你必須非常小心,有一些方法可以退出遞歸。換句話說,你很容易陷入無限循環。 – 2013-04-11 02:10:05