Значение продолжает сбрасываться в методе

#java #methods

#java #методы

Вопрос:

Это должно быть довольно простой проблемой, но, поскольку я новичок в программировании, я, похоже, не могу в этом разобраться. Я хочу подсчитать количество мест, доступных в ресторане, и вычитать количество свободных мест после каждого нового бронирования (размещения заказа).

Я установил начальное значение для ‘restaurantCapacity’ равным 10, но оно сбрасывается обратно на 10 после каждой новой группы. Как мне перезаписать это значение. Проблема должна быть в методе ‘seatCapacity’

Если код работает правильно, у него должно остаться 1 место. (10 — группа из 4 — группа из 5 = 1)

 public class Reservation {
  int guestCount;
  int restaurantCapacity =10;
  boolean isRestaurantOpen;
  boolean isConfirmed;

//Constructor
  public Reservation(int groupSize, boolean restaurantStatus){
    guestCount = groupSize;
    isRestaurantOpen = restaurantStatus;
    //Order not filled
    if (isRestaurantOpen == false || guestCount > restaurantCapacity){
      System.out.println("Sorry, we were not able to fill your order.");
      //Reason
      if(isRestaurantOpen == false){
        System.out.println("We are currently closed.");
      }
      else{
        System.out.println("We are out of seats.n");
      }
      isConfirmed = false;
    }
    //Succesfull Order
    else{
      System.out.println("Your order has been filled");
      isConfirmed = true;
    }
  }

//Number of free seats------------------------------------
//METHOD WITH THE PROBLEM!

  public void seatCapacity(boolean isConfirmed){
    if (isConfirmed == true){
      System.out.println(restaurantCapacity); //----VALUE STAYS AT 10??
      restaurantCapacity -= guestCount;
      System.out.println(guestCount   " seats have been taken. "   restaurantCapacity   " seats are remaining.n");
      }
    }

//Main
  public static void main(String[] args){
    Reservation mason = new Reservation(4, true);
    mason.seatCapacity(true);
    Reservation johnson = new Reservation(5, true);
    johnson.seatCapacity(true);
  }
}
 

Я перепробовал кучу вещей, но он продолжает сбрасываться каждый раз.
Я не знаю, увидит ли кто-нибудь это, но помощь была бы очень признательна.
Спасибо

Комментарии:

1. Как указали текущие ответчики, у вас, похоже, есть некоторое недопонимание того, как правильно моделировать это с вашим классом. Если вы подумаете о том, как работает резервирование в реальном мире, вы бы не сказали, что конкретное резервирование имеет какое-либо отношение к общей вместимости ресторана (смоделировано здесь restaurantCapacity ), вместо этого это будет свойство самого ресторана. Аналогичная логика может быть применена к идее, открыт ли ресторан ( isRestaurantOpen ).

2. Привет. Я все еще экспериментирую и меняю вещи с этим кодом, но застрял с этой проблемой. Спасибо за ваш совет. Я постараюсь настроить его так, как вы описали.

Ответ №1:

Короткий ответ — создать restaurantCapacity static , таким образом, он будет разделен между экземплярами Reservation .

Однако я бы посоветовал вам изучить моделирование объекта для самого ресторана. Сейчас резервирование выполняется слишком много, и ресторан может отвечать за свои собственные возможности и определять, было ли принято бронирование или нет.

Комментарии:

1. Я собирался предложить то же самое, добавив модель ресторана, поскольку вместимость должна быть исключена из резервирования. Возможно, наряду с емкостью у объекта-реципиента может быть также Список резервирований. В любом случае, хороший!

2. Кстати, даже если бы это могло решить проблему, я на самом деле не рассматриваю емкость как статический элемент резервирования, я рассматриваю это как обходной путь для моделирования конкретного класса, но мне это не очень нравится.

3. Спасибо за ваш ответ. Я также думал, что мой конструктор был довольно загроможден. Я постараюсь воплотить ваш совет в жизнь.

Ответ №2:

Видите ли, restaurantCapacity это атрибут класса Reservation , что означает, что каждый экземпляр будет иметь свою собственную переменную restaurantCapacity . Итак, когда вы создаете mason и johnson , каждая из них имеет свою собственную переменную с отдельными значениями 10 (и к которым вычитаются 4 и 5 соответственно).

Если вы хотите, чтобы переменная была общей для экземпляров одного и того же класса, вы должны объявить ее статической. Попробуйте добавить static перед объявлением атрибута, которым вы хотите поделиться.

 static int restaurantCapacity = 10;
 

Комментарии:

1. Это безумие. Я только что присоединился к этому веб-сайту и не ожидал получить несколько ответов в течение нескольких минут. Я, вероятно, должен был бы знать ответ на эту проблему, но я очень благодарен за объяснение. <3

Ответ №3:

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

 static int restaurantCapacity = 10;
 

для вас достаточно.