Cela devrait être un problème assez simple, mais comme je suis assez nouveau dans la programmation, je n'arrive pas à le comprendre. Je veux compter les places disponibles dans un restaurant et soustraire le nombre de places libres après chaque nouvelle réservation (commande de places).

J'ai défini la valeur de départ de 'restaurantCapacity' sur 10, mais elle est réinitialisée à 10 après chaque nouveau groupe. Comment écraser cette valeur. Le problème devrait être dans la méthode 'seatCapacity'

Si le code fonctionne correctement, il devrait rester 1 siège. (10 - groupe de 4 - groupe de 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);
  }
}

J'ai essayé plein de trucs mais ça se réinitialise à chaque fois. Je ne sais pas si quelqu'un verra cela, mais de l'aide serait très appréciée. Merci

1
CallTheDay 24 mars 2021 à 21:48

3 réponses

Meilleure réponse

Vous voyez, restaurantCapacity est un attribut de la classe Reservation, ce qui signifie que chaque instance aura sa propre variable restaurantCapacity. Ainsi, lorsque vous créez mason et johnson, chacun a sa propre variable, avec des valeurs distinctes de 10 (et auxquelles 4 et 5 sont soustraits, respectivement).

Si vous souhaitez qu'une variable soit partagée entre les instances de la même classe, vous devez la déclarer statique. Essayez d'ajouter static avant la déclaration de l'attribut que vous souhaitez partager.

static int restaurantCapacity = 10;
0
Miguel 24 mars 2021 à 18:59

La réponse courte est de rendre le restaurantCapacity static, de cette façon il sera partagé entre les instances de Reservation.

Je vous conseillerais cependant de vous pencher sur la modélisation d'un objet pour le restaurant lui-même. La Réservation en fait un peu trop en ce moment et le Restaurant pourrait être en charge de sa propre capacité et déterminer si une réservation a été acceptée ou non.

2
Luca Cucchetti 24 mars 2021 à 18:55

Si vous voulez qu'une variable reste avec son ancienne valeur, la rendre statique vous aidera.

static int restaurantCapacity = 10;

Te suffit.

0
Mustafa Akçakaya 24 mars 2021 à 19:02