如何返回另一个案例

时间:2017-06-22 02:14:43

标签: java case break

我需要帮助,我有几个案例,我想从一个案例返回另一个案例,但它一直返回到do菜单,例如我点击1然后1然后1然后程序返回第一个案例,登录案例,但我想返回可视化的

public static void main(String[] args) {
int op;
        Scanner ler = new Scanner(System.in);
        do
        {
            System.out.println("1 - Iniciar sessão");//login
            System.out.println("0 - Terminar programa");//end program
            System.out.print("OP-> ");
            op = ler.nextInt();

        switch(op)
            {
               case 1:
                   System.out.println("1 - Visualizar lista encomendas realizadas");//visualize
                   System.out.println("2 - Listar/adicionar/modificar/eliminar produtos");//modifie/remove/add product
                   System.out.println("3 - Listar/adicionar/modificar/eliminar clientes");//modifie/remove/add client
                   System.out.println("4 - Listar/adicionar/modificar/eliminar transporte");//modifie/remove/add transportation
                   System.out.println("5 - Terminar sessão");//end session
                   System.out.println("0 - Terminar programa");//end program
                   System.out.println("OP-> ");
                   op = ler.nextInt();

                    switch(op)
                    {
                        case 1:
                             System.out.println("1 - Voltar ao menu principal");//return to menu
                             System.out.println("OP-> ");
                             op = ler.nextInt();
                            break;


                        case 2:
                             System.out.println("1 - Listar produtos");
                             System.out.println("2 - Adicionar produtos");
                             System.out.println("3 - Modificar produtos");
                             System.out.println("4 - Eliminar produtos");
                             System.out.println("5 - Voltar");
                             System.out.println("OP-> ");
                             op = ler.nextInt();

                                 switch (op)
                                 {
                                     case 1:
                                         break;

                                     case 2:
                                         break;


                                     default: System.out.println("Opção inválida");    
                                 }
                           break;

                        case 3:
                             System.out.println("1 - Listar clientes");
                             System.out.println("2 - Adicionar clientes");
                             System.out.println("3 - Modificar clientes");
                             System.out.println("4 - Eliminar clientes");
                             System.out.println("5 - Voltar");
                             System.out.println("OP-> ");
                             op = ler.nextInt();

                                 switch (op)
                                    {
                                     case 1:
                                         break;

                                     case 2:
                                         break;

                                     case 3:
                                         break;

                                     case 4:
                                         break;

                                     case 5:
                                         break;

                                     default: System.out.println("Opção inválida");  
                                    }
                           break;

                        case 4:
                             System.out.println("1 - Listar transporte");
                             System.out.println("2 - Adicionar transporte");
                             System.out.println("3 - Modificar transporte");
                             System.out.println("4 - Eliminar transporte");
                             System.out.println("5 - Voltar");
                             System.out.println("OP-> ");
                             op = ler.nextInt();
                                 switch (op)
                                    {
                                     case 1:
                                         break;

                                     case 2:
                                         break;

                                     case 3:
                                         break;

                                     case 4:
                                         break;

                                     case 5:
                                         break;

                                     default: System.out.println("Opção inválida");  
                                    }
                           break; 

                        case 5:
                            break;

                        default: System.out.println("Opção inválida");   
                    }
                break; 

               default: System.out.println("Opção inválida");
           }

    }
    while(op!=0);
}

}

3 个答案:

答案 0 :(得分:1)

根据using labels in java without "loops"

您可以使用标签来定义要中断的位置。

然而,在紧密嵌套循环之外这样做是非常不正统的。

  Scanner ler = new Scanner(System.in);
  main:
  do {
    System.out.println("1 - login");
    System.out.println("0 - end program");
    System.out.print("OP-> ");
    op = ler.nextInt();

    switch(op) {
      case 1:
        menu:
        do {
          System.out.println("1 - visualise");
          System.out.println("2 - modify/remove/add product");
          System.out.println("3 - modify/remove/add client");
          System.out.println("4 - modify/remove/add transportation");
          System.out.println("5 - end session");
          System.out.println("0 - end program");
          System.out.println("OP-> ");
          op = ler.nextInt();

            switch(op)
            {
              case 1:
                do{
                System.out.println("1 - return to menu");
                System.out.println("OP-> ");
                op = ler.nextInt();
                } while(op!=1)
                break menu;

        //SNIP
         }
         while(true)

答案 1 :(得分:1)

以下是如何将菜单拆分为方法并在正确的位置调用它们的示例。请注意,每个菜单都包含一个循环。此外,您的op变量在所有菜单上都是相同的,这使它们无法正常工作。

    static Scanner ler;
    public static void menuClientes(){
        int op= 0;

        while (op!= 5){
            System.out.println("1 - Listar clientes");
            System.out.println("2 - Adicionar clientes");
            System.out.println("3 - Modificar clientes");
            System.out.println("4 - Eliminar clientes");
            System.out.println("5 - Voltar");
            System.out.println("OP-> ");
            op = ler.nextInt();

            switch (op) {
            case 1:
                break;

            case 2:
                break;

            case 3:
                break;

            case 4:
                break;

            case 5:
                break;

            default:
                System.out.println("Opção inválida");
            }
        }
    }

    public static void menuTransporte(){
        int op= 0;

        while (op!= 5){
            System.out.println("1 - Listar transporte");
            System.out.println("2 - Adicionar transporte");
            System.out.println("3 - Modificar transporte");
            System.out.println("4 - Eliminar transporte");
            System.out.println("5 - Voltar");
            System.out.println("OP-> ");
            op = ler.nextInt();
            switch (op) {
            case 1:
                break;

            case 2:
                break;

            case 3:
                break;

            case 4:
                break;

            case 5:
                break;

            default:
                System.out.println("Opção inválida");
            }
        }
    }

    public static void menuPrincipal(){
        int op= 0;

        while (op!= 5){
            System.out.println("1 - Visualizar lista encomendas realizadas");// visualize
            System.out.println("2 - Listar/adicionar/modificar/eliminar produtos");
            System.out.println("3 - Listar/adicionar/modificar/eliminar clientes");
            System.out.println("4 - Listar/adicionar/modificar/eliminar transporte");
            System.out.println("5 - Terminar sessão");
            System.out.println("0 - Terminar programa");
            System.out.println("OP-> ");
            op = ler.nextInt();

            switch (op) {
            case 1:break;
            case 2:break;
            case 3: menuClientes();break;
            case 4: menuTransporte(); break;
            case 5: return;
            default:
                System.out.println("Opção inválida");
            }
        }
    }

    public static void main(String[] args) {

        int op;
        ler = new Scanner(System.in); //the declarion of this variable was put on the class itself to be accessible by all methods

        do {
            System.out.println("1 - Iniciar sessão");// login
            System.out.println("0 - Terminar programa");
            System.out.print("OP-> ");
            op = ler.nextInt();


            switch (op) {
            case 1: menuPrincipal();break;

            default:
                System.out.println("Opção inválida");
            }

        } while (op != 0);
    }

答案 2 :(得分:0)

最好将每个switch语句分成它们自己的函数/方法。这样你就可以给它们适当的名字(即让它们更容易阅读每个开关选项的意图)。重新组织代码还可以让您更好地了解执行路径在返回时的位置,而不是使用您指示从所有开关退出并返回到do-while循环的break。

同样按照1,1,1的示例导致一个中断,退出该切换到另一个中断,这会中断到第三个中断,让你回到do-while循环中。因此,如果您需要重新显示第二个选项的选项,则需要另外一个循环。

e.g。 (为了让你开始。这也没有经过测试,只是为了大致了解将开关选项分成功能。)

public static void main(String[] args) {
  int op;
  Scanner ler = new Scanner(System.in);
  do
  {
    System.out.println("1 - Iniciar sessão");//login
    System.out.println("0 - Terminar programa");//end program
    System.out.print("OP-> ");
    op = ler.nextInt();

    op = Login(op, ler);
  }
  while (op != 0);
}

public static int Login(int op, Scanner ler)
{
  switch (op)
  {
    case 0: // terminate program
      return 0;
    case 1:
      DisplayOptions(ler);
      return 1;
  }
}

public static int DisplayOptions(Scanner ler)
{
  do 
  {
    System.out.println("1: visualize");
    System.out.println("2: modify");
    ... etc...
    System.out.println("0: terminate program");

    int op = ler.nextInt();
    switch (op)
    {
      case 1:
        op = Visualize(ler);
        break;
      case 2:
        op = Modify(ler);
        break;
      case 0:
        System.out.println("Exiting program");
        break;
      default:
        System.out.println("invalid input");
    }
  }
  while (op != 0);
}

public static int Visualize(Scanner ler)
... etc ...