如何使用 do while 和 switch 返回上一个菜单?

How do you go back to the previous menu with do while and switch?

我在一个 do-while 循环中有一个 do-while 循环,并为每个循环切换大小写。

我希望主菜单永远循环,并希望主菜单案例在某些情况下返回主菜单。

例如:

//main menu
do {
  case 1:
  do {
    case 1:
    case 2:
    } while(something);
    //go back to main menu
  case 2:
  case 3:
  case 4:
} while(true);

如何在 Java 代码中实现此目的?

下面是我的代码供您参考(如果您需要的话):)

import java.util.Scanner;

public class Test {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    do {

      System.out.println("[1] Priority Queue");
      System.out.println("[2] 2D Array");

      System.out.print("Please choose a data structure: ");

      int num = scanner.nextInt();
      switch (num) {

      // ==================== PriorityQueue ====================
      case 1:
        System.out.println("\n=== Priority Queue Test ===\n");

        System.out.print("Enter size of priority queue: ");
        PriorityQueue pq = new PriorityQueue(scanner.nextInt());

        char a;
        /* Perform Priority Queue operations */
        do {
          System.out.println("\nPriority Queue Operations\n");
          System.out.println("1. insert");
          System.out.println("2. remove");
          System.out.println("3. check empty");

          int choice = scanner.nextInt();
          switch (choice) {
          case 1:
            System.out.print("Enter job name and priority: ");
            pq.insert(scanner.next(), scanner.nextInt());
            break;
          case 2:
            System.out.println("\nJob removed \n\n" + pq.remove());
            break;
          case 3:
            System.out.println("\nEmpty Status: " + pq.isEmpty());
            break;
          default:
            System.out.println("Wrong Entry \n ");
            break;
          }
          System.out.println("\nDo you want to continue? (y or n) \n");
          a = scanner.next().charAt(0);
        } while (a == 'Y' || a == 'y' || a != 'N' || a != 'n');
        break;

      // ==================== 2D Array ====================
      case 2:
        TwoDimensionalArray array = new TwoDimensionalArray();

        System.out.println("\n=== 2D Array Test ===\n");
        System.out.println("Enter size of 2D Array: ");
        int DIM = scanner.nextInt();
        int[][] table = new int[DIM][DIM];

        char b;
        do {

          System.out.println("1. insert [x][y] coordinate");
          System.out.println("2. remove [x][y] coordinate");
          System.out.println("3. empty");
          System.out.println("4. print");

          int choice = scanner.nextInt();
          switch (choice) {
          case 1:
            array.insert(table, scanner);
            break;
          case 2:
            array.remove(table, scanner);
            break;
          case 3:
            array.empty(DIM);
            break;
          case 4:
            array.print(DIM, table);
            break;
          }
          System.out.println("\nDo you want to continue? (y or n) \n");
          b = scanner.next().charAt(0);
        } while (b == 'Y' || b == 'y' || b != 'N' || b != 'n');
        break;
      default:
        System.out.println("Please choose a number on the list!\n");
      }
      while (num == 1 || num == 2 || num == 3 || num == 4 || num == 5 || num == 6 || num == 7 || num == 8 || num == 9
          || num == 10 || num == 11 || num == 12 || num == 13 || num == 14 || num == 15 || num == 16 || num == 17)
        ;
    } while (true);
  }
}

看看你的 while 条件。

while (a == 'Y' || a == 'y' || a != 'N' || a != 'n');

这始终计算为 true,因此您永远不会离开内部循环。

您需要将其更改为

while ((a == 'Y' || a == 'y') && (a != 'N' || a != 'n'));

这部分似乎没有必要

  while (num == 1 || num == 2 || num == 3 || num == 4 || num == 5 || num == 6 || num == 7 || num == 8 || num == 9
      || num == 10 || num == 11 || num == 12 || num == 13 || num == 14 || num == 15 || num == 16 || num == 17)
    ;

如果您删除它并相应地更改 while 条件,它应该可以工作。