Повторяя цикл в меню - PullRequest
       7

Повторяя цикл в меню

0 голосов
/ 02 ноября 2018

Я пытаюсь создать меню отеля на 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 голосов
/ 02 ноября 2018

Оба ваших цикла 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);
0 голосов
/ 02 ноября 2018

Здесь происходит цикл:

while(choice !=8);

Вы должны убедиться, что конечное условие всегда выполняется в какой-то момент, чтобы избежать нежелательных бесконечных циклов.

Может быть, вы имели в виду if(choice != 8), а не цикл do / while (который будет работать до тех пор, пока не будет выбрано значение 8, что произойдет, только если пользователь введет 8).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...