#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;
для вас достаточно.