Java 主菜单出现一次,但关闭,甚至不输入退出选项。也没有正确调用函数?

Java 主菜单出现一次,但关闭,甚至不输入退出选项。也没有正确调用函数?,java,function,oop,menu,submenu,Java,Function,Oop,Menu,Submenu,当我运行我的程序时使用!choice.equals6,它会运行我的主菜单一次,但不会执行所选的功能,不会发生任何事情,并且会立即退出。但是,如果while循环中的条件是choice.equals6,它将执行我的一个函数,当我从1-5中选择时,主菜单将重新显示并退出,而我甚至没有输入6。菜单不会调用所选的其他功能。我有点懊恼,这两种情况在我正在进行的项目中都不起作用 我用了debbuger,当我进入状态时,它不会让我通过!选择。相等。在我决定退出程序之前,我希望主菜单会一直要求我输入一个选项 pr

当我运行我的程序时使用!choice.equals6,它会运行我的主菜单一次,但不会执行所选的功能,不会发生任何事情,并且会立即退出。但是,如果while循环中的条件是choice.equals6,它将执行我的一个函数,当我从1-5中选择时,主菜单将重新显示并退出,而我甚至没有输入6。菜单不会调用所选的其他功能。我有点懊恼,这两种情况在我正在进行的项目中都不起作用

我用了debbuger,当我进入状态时,它不会让我通过!选择。相等。在我决定退出程序之前,我希望主菜单会一直要求我输入一个选项

private void mainMenu() 
{
    String input = JOptionPane.showInputDialog("Persona Library Main Menu\n" +
             "1. Add from this list:\n" +
             "    -Language\n" +
             "    -Fiction\n" +
             "    -Geography\n" +
             "2. Search Item By ID\n" +
             "3. Remove this from Library\n" +
             "4. Random Books\n" +
             "5. Print complete list or by category\n" +
             "6. Exit Program");
    String choice = input;

        while(!choice.equals("6"));                 
        {

            switch(choice)
            {
            case "1":
                addToLibrary();
                break;
            case "2":
                searchByIDtoPrint();
                break;
            case "3":
                removeFromLibrary();
                break;
            case "4":
                //undecided;
                break;
            case "5":
                searchCategoryToPrint();
                break;
            case "6":
                //undecided
                break;
            }
            input = JOptionPane.showInputDialog("Persona Library Main Menu\n" +
                     "1. Add from this list:\n" +
                     "    -Language\n" +
                     "    -Fiction\n" +
                     "    -Geography\n" +
                     "2. Search Item By ID\n" +
                     "3. Remove this from Library\n" +
                     "4. Random Books\n" +
                     "5. Print complete list or by category\n" +
                     "6. Exit Program");
             choice = input;
        }
}

从我所能读到的情况来看——情况虽然如此!choice.equals6仅在choice不等于6时运行,这意味着如果在第一次输入选择时不输入6,它将永远不会进入循环,只需转到下一个输入提示

由于在您第二次要求输入数字后,输入提示不在循环内,因此程序将到达函数末尾,我假设终止-这是您的一些问题所在,您没有告诉它在第二次提示后执行任何操作

我可以推荐一个do while循环,如:

do { /*Enter input prompts and case statements here*/ } while (program == true)
仅当您选择关闭程序的选项时才设置输入。 这样,您可以保证程序至少运行一次,如果您从未选择退出,只需返回提示符即可

*编辑-另外,我刚刚注意到,在while循环中,您从未更改选择,这意味着您将处于无限循环中


我希望这能回答你的问题。

分号会使你的while循环短路:while!选择。等式6@装满鳗鱼的气垫船谢谢你的指点。我终于让它工作了。我在eclipse中的背景可能让我很难看到while条件旁边的分号,哈哈!谢谢谢谢你的建议。我已经将while循环改为do-while,现在它工作得很好。我已经完全忘记了do while,因为我已经用过一次,再也没有用过。虽然这将是我第二次使用。谢谢不用担心:很高兴我能帮忙!