Java noob在这里。我正在尝试编写一个“应用程序菜单”程序,为用户提供可以运行的不同应用程序的主菜单。一旦他们做出选择,该应用程序就会运行,然后为他们提供返回主菜单或退出程序的选项。我在这里遇到一个问题,如果用户通过反复返回主菜单运行多个应用程序,当他们最终选择退出程序的选项时,会提示他们使退出选择的次数与用户运行不同的应用程这意味着,如果在运行期间,他们运行应用程序4次,则会重新提示“1返回主菜单或2退出”提示4次。帮助??
public class Menu {
private MathPractice math = new MathPractice();
private Scanner scan = new Scanner(System.in);
private Calculator calc = new Calculator();
private BasePage base = new BasePage();
private String menuHeader = "Welcome to the Math Applications Menu";
public void mainMenu()
{
while (true){
System.out.println();
base.headerUnderline(menuHeader);
System.out.println(menuHeader);
base.headerUnderline(menuHeader);
System.out.println("Enter 1 for Bill Pay");
System.out.println("Enter 2 for Multiplication Table");
System.out.println("Enter 3 for Test Score");
System.out.println("Enter 4 for Calculator");
base.headerUnderline(menuHeader);
int userChoice = scan.nextInt();
if (userChoice == 1)
{
math.billPay();
postAppMenu();
break;
}
else if (userChoice == 2)
{
math.multiplicationTable();
postAppMenu();
break;
}
else if (userChoice == 3)
{
math.testScore();
postAppMenu();
break;
}
else if (userChoice == 4)
{
calc.calculator();
postAppMenu();
break;
}
else {
System.out.println("Please select a valid option!");
}
}
}
private void postAppMenu()
{
while (true){
base.headerUnderline(menuHeader);
System.out.println("Enter 1 for Main Menu");
System.out.println("Enter 2 to Quit");
base.headerUnderline(menuHeader);
int userChoice = scan.nextInt();
if (userChoice == 1){
mainMenu();
}
else if (userChoice == 2){
System.out.println("Thank your for using the Math Application.");
System.out.println("Have a good day. Goodbye.");
break;
}else {
System.out.println("That's not a valid selection");
}
}
}
}
答案 0 :(得分:2)
您正在从postAppMenu调用mainMenu。没有坐在这里进行完整的静态分析,我认为每次进入postAppMenu时,你再次调用mainMenu,这意味着你正在深入了解函数堆栈。当你最终决定退出时,它必须一次回滚一个堆栈。
尝试重写,而不是从postAppMenu调用mainMenu,只需将postAppMenu“返回”回到mainMenu。
除非你打算实现某种类型的递归算法,否则方法A调用方法A通常不是一个好主意。它可以完成,但它可能很棘手。
答案 1 :(得分:1)
如果在调用mainMenu后退出postAppMenu方法会发生什么?
if (userChoice == 1){
mainMenu();
break;
}