Java开关盒

Java开关盒,java,switch-statement,Java,Switch Statement,当我进入子菜单并完成(例如案例1)时,案例完成后,它会自动跳转到主菜单的案例2,有人能告诉我如何停止,因为我希望它只是再次显示主菜单吗 switch (choice) { case 1: //finish add passenger System.out.println(" 1 - Add passenger"); System.out.println(mySubMenu.displayMenu()); int subChoice =

当我进入子菜单并完成(例如案例1)时,案例完成后,它会自动跳转到主菜单的案例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;
}

在每个
案例的末尾使用
break

这里的问题是您有两个
案例1:

  • 案例1:在
    开关(选择)
  • 案例1:在
    开关(子选择)
你错过了两件事:

  • switch(choice)
    中的
    break
    语句,因此将执行
    案例2中的代码:
  • 开关(子选择)
    中的
    案例1:
    的catch分支
看看这个简单的例子:

switch(choice) {
case 1:
    // code1
    break;
case 2: 
    // code2
    break;
}
在这里,案例代码将单独执行

否则,在本规范中:

switch(choice) {
case 1:
    // code1
case 2: 
    // code2
}
当不使用
break
时,代码将继续执行,因此当
choice==1
code1
code2
时,将执行。但是如果
choice==2
只执行
code2
。当两个或多个选项共享某些代码时,这是非常有用的

注意:这也是有效的:

switch(choice) {
case 1:
case 2: 
    // code1
    // code2
    break;
}
在此语句中,
case1
case2
将执行相同的代码


解决方案: 了解这一点后,您的代码必须有两个修复:

  • break
    语句插入
    switch(choice)
    中的
    case2:
  • 开关(子选择)
    案例1:
    break
    语句移到末尾,就在
    案例2:

  • 尝试使用中断标签中断外部开关语句。或者在内部开关语句之后放置break。更简单的是。
    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");