如何在Java中添加退出开关盒的选项

如何在Java中添加退出开关盒的选项,java,Java,我正在使用SwitchCase用java创建一个基于菜单的程序。 以下是4个案例: 添加记录 删除记录 更新记录 出口 我在每个案例之后都添加了break,但是,我想做的是在用户输入案例4时终止程序,那么在这种情况下该怎么办呢?如果您想直接退出,请返回或退出System.exit(ExitCode)。您可以使用System.exit()实现此目的 系统退出(int状态) 终止当前运行的Java虚拟机 在第4种情况下,添加: System.exit(int status); 通常,status>

我正在使用SwitchCase用java创建一个基于菜单的程序。 以下是4个案例:

  • 添加记录
  • 删除记录
  • 更新记录
  • 出口

  • 我在每个案例之后都添加了break,但是,我想做的是在用户输入案例4时终止程序,那么在这种情况下该怎么办呢?

    如果您想直接退出,请返回或退出System.exit(ExitCode)。

    您可以使用
    System.exit()
    实现此目的

    系统退出(int状态)

    终止当前运行的Java虚拟机

    在第4种情况下,添加:

    System.exit(int status);
    
    通常,
    status>=0
    表示程序正确终止,
    status<0
    表示异常终止。我认为你应该使用:

    System.exit(0);
    

    状态
    用作错误代码。您可以指定任何您想要的值。如果您的程序包含多个退出点,则可以为其分配不同的错误代码。您可以将错误代码返回给调用应用程序的环境。通过此错误代码,您可以跟踪是哪个System.exit()导致程序终止。

    您的
    switch
    语句中的特定
    案例将是:

    case 4: System.exit(0);
    

    请不要使用
    系统。退出
    。这就像用链锯切西红柿一样。这是一个钝的工具,可能在紧急情况下有用,但在正常情况下,如您试图编写

    有两种更好的方法:(1)如果将循环放在一个方法中,该方法的唯一目的是读取用户的输入并执行所需的功能,则可以从该方法返回:

    private static void mainMenu() {
        while(true) {
            char option = getOptionFromUser();
            switch(option) {
                case '1':
                    addRecord();
                    break;
                case '2':
                    deleteRecord();
                    break;
                case '3':
                    updateRecord();
                    break;
                case '4':
                    return;
            }
        }
    }
    
    现在,无论程序调用什么
    main menu()
    都有机会进行一些清理,打印一条“再见”消息,在退出之前询问用户是否要备份文件,等等。使用
    System.exit
    ,您无法做到这一点

    除了
    返回
    ,另一种机制是使用
    中断
    退出循环。由于
    中断
    也会中断开关
    ,因此需要一个循环标签:

    private static void mainMenu() {
        menuLoop:
        while(true) {
            char option = getOptionFromUser();
            switch(option) {
                ... as above
                case '4':
                    break menuLoop;
            }
        }
        ... will go here when user types '4', you can do other stuff if desired
    }
    
    或者(正如Riddhesh Sanghvi所建议的那样),您可以在
    while
    循环中设置一个条件,而不是中断它。他的回答使用了基于
    选项的条件
    ;我经常使用的另一个习惯用法是设置一个
    boolean
    ,目的是:

    private static void mainMenu() {
        boolean askForAnother = true;
        while(askForAnother) {
            char option = getOptionFromUser();
            switch(option) {
                ... as above
                case '4':
                   askForAnother = false;
            }
        }
        ... will go here when user types '4', you can do other stuff if desired
    }
    
    或:


    因此,您有很多选项,都比
    系统好。如果您不想选择
    返回
    系统,请退出
    。退出(ExitCode)
    ,然后将终止条件放入while循环,如下所示。
    为什么要将
    while(true)
    ,然后将
    返回
    系统。退出
    ,而不是退出利用while循环的布尔检查退出它。

    private static void mainMenu() {
        int option=0;//initializing it so that it enters the while loop for the 1st time 
        while(option!=4){
            option = getOptionFromUser();
            switch(option) {
                case 1:
                    addRecord();
                    break;
                case 2:
                    deleteRecord();
                    break;
                case 3:
                    updateRecord();
                    break;
                case 4:
                    System.out.print("While Loop Terminated");
                    break;
            }
        }
        // when user enters 4,
        //Will execute stuff(here the print statement) of case 4 & then
        //... will come here you can do other stuff if desired
    }
    

    无论何时,当您想退出交换机时,最好使用do while循环,因为如果用户希望更新、删除或添加程序中的多个记录,则可以再次运行程序

    class record{
    public static void main(String args[]){
    do
    {
    System.out.Println("Enter Choice ");
    Scanner sc = new Scanner(System.in);
    int choice = sc.nextInt();
    switch(option){
    case 1:{
    //Code for Adding the Records
    break; 
    }
    case 2:{
    //Code for deleting the Records
    break;
    }
    case 3:{
    //Code for Updating the Records 
    break;
    }
    case 4:{
    break; 
          }
       }
    }
    while(choice!=4);
        }
    }
    
    无论您想在何处添加用于添加、删除和更新记录的代码,您都可以调用在交换机外壳外部定义的方法,并且程序应该可以正常运行

    float ans

        switch(operator)
        {
            case '+':
                ans = no1 + no2;
                break;
    
            case '-':
                ans = no1 - no2;
                break;
    
            case '*':
                  ans = no1 * no2;
                break;
    
            case '/':
                  ans = no1 / no2;
                break;
        case '0':
        System.exit(0);
    
            default:
                System.out.printf("EERRRoOOOORRR(^!^)");
                return;
        }
    

    但此处的状态是什么?您可以定义自己的状态,例如,您可以传递
    -1
    并假设这是一个错误,或者在一切正常时传递
    0
    。状态只是一个帮助您的变量,您可以在几种情况下结束程序(例如错误),使用此状态变量您可以确定自己的错误代码。或者你根本不能传递任何状态。这都是你的事。@AbhijitKumbhar请不要使用
    系统。为此退出
    。我很震惊有这么多的答案推荐它。@Solver你答对了。为什么否决票我问错了什么?我认为否决票的原因可能是:一般来说,StackOverflow更喜欢那些表明提问者试图自己解决问题、遇到问题或陷入困境的问题,而不是那些看起来像发问者只是想让别人为他们做工作的问题。你的问题有点牵强,可以采取任何一种方式。下一次,尝试自己编写代码,直到卡住为止,然后发布您尝试过的代码。您获得否决票的可能性会小得多。@AbhijitKumbhar请不要使用
    系统。为此退出
    。我很震惊,有这么多的答案推荐它。是的,我看到了你的答案,似乎更有效。我将确保在编写下一个实验作业时使用
    return
    。谢谢。@Mr.Robot您也可以利用while循环的条件来达到同样的效果。如果您希望避免添加额外的
    return
    System.exit
    @ridheshsanghvi Yes,这将是最简单的方法。@AbhijitKumbhar请不要为此使用
    System.exit
    。我很震惊,有这么多答案推荐它。@AbhijitKumbhar请不要为此使用
    系统。退出
    。我很震惊有这么多的答案推荐它。还有一种方法没有使用
    返回
    中断
    系统。退出
    将使用while循环的条件。@ridheshsanghvi谢谢,我已经编辑了我的答案,以包括一些其他选项。
        switch(operator)
        {
            case '+':
                ans = no1 + no2;
                break;
    
            case '-':
                ans = no1 - no2;
                break;
    
            case '*':
                  ans = no1 * no2;
                break;
    
            case '/':
                  ans = no1 / no2;
                break;
        case '0':
        System.exit(0);
    
            default:
                System.out.printf("EERRRoOOOORRR(^!^)");
                return;
        }