Java 开关盒

Java Switch case

当我进入子菜单并完成例如case 1,case完成后,自动跳转到主菜单的case 2,谁能告诉我如何停止这个,因为我想要它只是再次显示主菜单

switch (choice) {
    case 1:    //finish add passenger
        System.out.println(" 1 - Add passenger");
        System.out.println(mySubMenu.displayMenu());
        int subChoice = mySubMenu.getChoice();
        switch (subChoice) {
            case 1:
                try {
                    System.out.println("Please enter the passengers forename");
                    String aforename = strKeyB.next();
                    System.out.println("Please enter the passengers surname");
                    String surname = strKeyB.next();

                    System.out.println("Please enter the passengers nationality");
                    String nationality = strKeyB.next();

                    System.out.println("Please enter the passenger age");
                    int age = intKeyB.nextInt();
                    System.out.println(pass1.pasengerAdd(aforename, surname, nationality, age));
                    break;
                } catch (Exception ex) {
                    System.out.println(ex.toString());

                }

            case 2:
                try {
                    System.out.println("Please enter the passengers forename");
                    String onforename = strKeyB.next();
                    System.out.println("Please enter the passengers surname");
                    String onSurname = strKeyB.next();
                    pass1.pasengerAdd(onforename, onSurname);

                } catch (Exception ex) {
                    System.out.println(ex.toString());

                }
                break;
            case 3:
                try {
                    System.out.println("Please enter the passengers forename");
                    String nnforename = strKeyB.next();
                    System.out.println("Please enter the passengers surname");
                    String nnSurname = strKeyB.next();
                    System.out.println("Please enter the passengers age");
                    int intAge = intKeyB.nextInt();
                    pass1.pasengerAdd(nnforename, nnSurname, intAge);


                } catch (Exception ex) {
                    System.out.println(ex.toString());

                }//end catch 
                break;
            case 4:
                try {
                    System.out.println("Please enter the passengers forename");
                    String naforename = strKeyB.next();
                    System.out.println("Please enter the passengers surname");
                    String naSurname = strKeyB.next();
                    System.out.println("Please enter the passengers nationality");
                    String naNat = strKeyB.next();
                    pass1.pasengerAdd(naforename, naSurname, naNat);

                } catch (Exception ex) {
                    System.out.println(ex.toString());

                }
                break;
            case 5:
                System.out.println(myMenu.displayMenu());
                break;
        }//end sub menu switch


    case 2:
        try {
            System.out.println(" 2 - Delete Passenger");
            System.out.println("Please enter the passenger forename ");
            String dForename = strKeyB.next();
            System.out.println("Please enter the passenger surname ");
            String dSurname = strKeyB.next();
            System.out.println(pass1.passengerDelete(dForename, dSurname));
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }

        break;
}

在每个 case 块的末尾使用 break

这里的问题是你有两个 case 1::

  • 案例 1:在 switch(choice)
  • 案例 1:在 switch(subchoice)

您错过了两件事:

  • switch(choice)中的break语句,所以会执行case 2:的代码。
  • case 1:switch(subchoice) 的 catch 分支。

看看这个简单的案例:

switch(choice) {
case 1:
    // code1
    break;
case 2: 
    // code2
    break;
}

这里case代码会单独执行,

否则在此代码中:

switch(choice) {
case 1:
    // code1
case 2: 
    // code2
}

不使用break时,代码会一直执行,所以当choice==1 code1 AND code2执行。但是如果 choice==2 只会执行 code2当 2 个或更多选项共享一些代码时,确实有用。

注意:这也是有效的:

switch(choice) {
case 1:
case 2: 
    // code1
    // code2
    break;
}

在此语句中,Case 1Case 2 将执行相同的代码。


解决方案:

知道这一点,您的代码必须有 2 个修复:

  1. switch(choice) 中的 case 2:
  2. 代码之前插入 break 语句
  3. case 1:case 1:break语句移到最后,就在case 2:
  4. 的代码之前

switch (choice) {
case 1:    //finish add passenger
    System.out.println(" 1 - Add passenger");
    System.out.println(mySubMenu.displayMenu());
    int subChoice = mySubMenu.getChoice();
    switch (subChoice) {
        case 1:
            try {
                System.out.println("Please enter the passengers forename");
                String aforename = strKeyB.next();
                System.out.println("Please enter the passengers surname");
                String surname = strKeyB.next();

                System.out.println("Please enter the passengers nationality");
                String nationality = strKeyB.next();

                System.out.println("Please enter the passenger age");
                int age = intKeyB.nextInt();
                System.out.println(pass1.pasengerAdd(aforename, surname, nationality, age));
            } catch (Exception ex) {
                System.out.println(ex.toString());

            }
            break;  // here you miss case 1: in switch(subchoice) when exception

        case 2:
            try {
                System.out.println("Please enter the passengers forename");
                String onforename = strKeyB.next();
                System.out.println("Please enter the passengers surname");
                String onSurname = strKeyB.next();
                pass1.pasengerAdd(onforename, onSurname);

            } catch (Exception ex) {
                System.out.println(ex.toString());

            }
            break;

//
// more code until...
//

break; 

case 2:  // here you miss case 1: in switch(choice) 
    try {
        System.out.println(" 2 - Delete Passenger");