循环随机循环。无法找出原因。

时间:2017-11-08 00:30:52

标签: java while-loop

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");
            }
        }

    }
}

2 个答案:

答案 0 :(得分:2)

您正在从postAppMenu调用mainMenu。没有坐在这里进行完整的静态分析,我认为每次进入postAppMenu时,你再次调用mainMenu,这意味着你正在深入了解函数堆栈。当你最终决定退出时,它必须一次回滚一个堆栈。

尝试重写,而不是从postAppMenu调用mainMenu,只需将postAppMenu“返回”回到mainMenu。

除非你打算实现某种类型的递归算法,否则方法A调用方法A通常不是一个好主意。它可以完成,但它可能很棘手。

答案 1 :(得分:1)

如果在调用mainMenu后退出postAppMenu方法会发生什么?

    if (userChoice == 1){
        mainMenu();
        break;
    }