java - 在菜单中重复 for 循环

标签 java loops for-loop menu

我正在尝试用 Java 创建酒店菜单(我仍在学习该语言),但遇到了问题。我可以让菜单打开一个新菜单,但是当我从第二个菜单中做出选择时,它会不断循环。我认为是 for 循环引起了这个问题。谁能告诉我如何让第二个菜单条目停止循环?方法如下:

菜单类方法:

public void getMenu()
    {
        Floor floor = new Floor();


        Scanner kboard = new Scanner(System.in);
        int choice = 0;

        System.out.println("Booking Menu");
        System.out.println("Select from the options below");
        System.out.println("1. Check room availability");
        System.out.println("2. Display floor");
        System.out.println("3. Display all availability");
        System.out.println("4. Cancel Booking");
        System.out.println("Please enter choice (press 8 to continue)");
        choice=kboard.nextInt();


        do
        {
            switch(choice)
            {
            case 1: room.getRoomMenu();
            break;
            case 2: 
            break;
            case 3: 
            break;
            }

        }
            while (choice !=8);
    }

该菜单在此方法中打开第二个菜单:

    public void getRoomMenu()
    {
        Floor f1 = new Floor(1);
        Floor f2 = new Floor(2);
        Floor f3 = new Floor(3);
        Floor f4 = new Floor(4);
        boolean check = false;

        Scanner kboard = new Scanner(System.in);
        int choice = 0;
        System.out.println("Which Floor?");
        System.out.println("1");
        System.out.println("2");
        System.out.println("3");
        System.out.println("4");
        choice=kboard.nextInt();
        do
        {
            switch(choice)
            {
            case 1: f1.displayFloor();
            break;
            case 2: f2.displayFloor();
            break;
            case 3: f3.displayFloor(); 
            break;
            case 4: f4.displayFloor(); 
            break;
            }
        }
        while(choice !=8);
        kboard.close();
    }

第二个菜单选项应显示所选楼层,其中显示该楼层的所有房间。这是displayFloor方法:

public void displayFloor()
    {
        /**
         * Displays floor number and room display method
         */
        System.out.println("Floor: "+floorNumber);
            for(int counter=0;counter<rooms.length;counter++)
            {
                rooms[counter].display();
            }


    }

最佳答案

只要 choice != 8,两个 while 循环都会继续循环。而且由于您从未修改循环内的选择,因此它将继续循环(除非用户输入了8)。

另请注意,您添加的 break;switch-case 的中断,而不是停止 do-while-循环。要在 switch-case 中使用 break 停止整个 do-while 循环,您应该使用标签为循环命名,然后中断该循环。此外,如果用户没有进入其中一个 switch-case,您应该要求用户提供新的输入,否则它仍然会永远循环。所以像这样:

choice = kboard.nextInt();
myLoop: do {
  switch(choice) {
    case 1:
      f1.displayFloor();
      break myLoop;
    case 2:
      f2.displayFloor();
      break myLoop;
    case 3:
      f3.displayFloor(); 
      break myLoop;
    case 4:
      f4.displayFloor(); 
      break myLoop;
    default: // Not one of the above
      System.out.println(choice + " is an unknown choice. Please choose again.");
      choice = kboard.nextInt(); // Ask the user for a new input
      break; // <- This break only breaks the switch, not the loop
  }
} while(choice !=8);

如果您的目的是继续循环直到用户输入 8,则应该是这样的:

choice = kboard.nextInt();
do {
  switch(choice) {
    case 1:
      f1.displayFloor();
      break;
    case 2:
      f2.displayFloor();
      break;
    case 3:
      f3.displayFloor(); 
      break;
    case 4:
      f4.displayFloor(); 
      break;
    default: // Not one of the above
      System.out.println(choice + " is an unknown choice. Please choose again.");
  }
  choice = kboard.nextInt(); // Ask the user for a new input for the next iteration
} while(choice !=8);

关于java - 在菜单中重复 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53117137/

相关文章:

java - JSoup 不翻译 html 链接中的 & 符号

C++程序陷入循环

r - 计算日期范围间隔的部分重叠数

java - 尝试使用标准差java

java - 具有多层的 JFrame

c++ - for循环中有多个输入

arrays - 使用矩阵运算而不是 FOR 循环对元胞数组与索引值进行 bool 比较

c++ - 递归重启循环 (C++)

java - 如何使用枚举创建单例类

java - 遍历一个计数字符串值