java - While循环随机循环。无法弄清楚为什么。

标签 java while-loop

这里是 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/

相关文章:

java - 从 .pub 格式的公钥创建 JSch HostKey 实例

java - 在嵌入式数据库中使用 JDBC 连接池有什么好处吗?

php - 为下拉列表取另一个表值

Python while 循环不会退出(初学者)

java - OOM中如何设计这个案例

java - 用java制作一个计算器,如何只允许数字输入

java - DemoIdentity DemoTrust keystore 无法与 Weblogic 上的标准 SOAP 客户端一起使用

C++ 如何检查多输入语句的第一个输入?

javascript - 我似乎无法使用 while 循环来处理我的代码

c++ - 为什么在 C 的循环中使用 printf 的 Rust 代码不显示输出,但在 C++ 的循环中使用 std::cout 却显示输出?