在菜单中重复循环

时间:2018-11-02 10:49:26

标签: 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();
            }


    }

2 个答案:

答案 0 :(得分:2)

您的while循环都继续循环,直到choice != 8。而且由于您从不修改循环内的choice,因此它将继续循环(除非用户输入了8)。

还要注意,您添加的break;是针对switch情况的中断,并不是为了停止do-while循环。要在切换情况下使break停止整个do-while循环,应使用标签为循环命名,然后中断该循环。另外,您应该要求用户提供一个新的输入,如果它没有进入开关盒之一,否则它将永远循环。像这样:

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);

答案 1 :(得分:0)

循环在这里发生:

while(choice !=8);

您需要确保始终满足结束条件,以避免不必要的无限循环。

也许您的意思是if(choice != 8)而不是do / while循环(它将一直运行直到选择为8,只有在用户输入8时才会发生)。