这里是 Java 菜鸟。我正在尝试编写一个“应用程序菜单”程序,为用户提供他们可以运行的不同应用程序的主菜单。一旦他们做出选择,该应用程序就会运行,然后为他们提供返回主菜单或退出程序的选项。我在这里遇到了一个问题,如果用户通过反复返回主菜单来运行多个应用程序,当他们最终选择退出程序的选项时,系统会提示他们进行退出选择的次数与用户运行不同的应用程序。意思是,如果在运行期间,他们运行应用程序 4 次,他们会再次收到 4 次“1 返回主菜单或 2 退出”提示。帮助??
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");
}
}
}
}
最佳答案
您正在从 postAppMenu 调用 mainMenu。无需坐在这里进行完整的静态分析,我认为每次进入 postAppMenu 时都会再次调用 mainMenu,这意味着您正在深入函数堆栈。当您最终决定退出时,它必须一次回滚一层。
尝试重写,而不是从 postAppMenu 调用 mainMenu,您只需让 postAppMenu“返回”回到 mainMenu。
除非您打算实现某种递归算法,否则方法 A 调用方法 B 而方法 B 调用方法 A 通常不是一个好主意。可以做到,但可能会很棘手。
关于java - While循环随机循环。无法弄清楚为什么。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47169654/