J'ai deux classes, la première est la suivante:

public class Room {

public String typeOfRoom;
public double area;
public int floor;
public int windowsCount;

public String getTypeOfRoom() {
    return typeOfRoom;
}

public double getArea() {
    return area;
}

public int getFloor() {
    return floor;
}

public int getWindowsCount() {
    return windowsCount;
}

public void setTypeOfRoom(String typeOfRoom) {
    this.typeOfRoom = typeOfRoom;
}

public void setArea(double area) {
    this.area = area;
}

public void setFloor(int floor) {
    this.floor = floor;
}

public void setWindowsCount(int windowsCount) {
    this.windowsCount = windowsCount;
}

}

Et la seconde est la suivante:

public class House {

public Address addressOfHouse;
public Room bedroom;
public Room childrenroom;
public Room kitchen;
public Room livingroom;
public Room lobby;
public Room workroom;

public House (){
    addressOfHouse=new Address();
    bedroom=new Room();
    childrenroom=new Room();
    kitchen=new Room();
    livingroom=new Room();
    lobby=new Room();
    workroom=new Room();
}

public double totalArea (int floor){
    double totalArea=1;
    return totalArea;
}

public double totalArea (){
    //Here I do not know how to keep on...
}

}

Mon problème est que je dois compléter la méthode "public double totalArea () {...}" et je ne sais pas trop comment le faire. Cette méthode devrait ajouter toutes les zones des pièces qui se trouvent au premier étage d'une maison. Je ne sais pas exactement comment l'exprimer dans la méthode, je ne sais pas quel genre de commande je devrais utiliser, j'ai pensé à "si" ou "pour", mais mon plus gros problème est de savoir comment exprimer que la surface totale est la somme des surfaces des pièces du premier étage, si la surface doit être définie dans la classe principale et je ne sais pas comment déclarer la «somme des surfaces» dans la méthode ... Pouvez-vous m'aider avec ça? Si vous pouviez simplement me donner une direction, dites simplement quelles étapes je dois suivre, envoyer des liens ou quelque chose, je serais très heureux. J'en ai déjà cherché la solution depuis deux semaines ... J'espère que vous m'avez compris. Merci beaucoup!

0
S. Farias 20 nov. 2018 à 20:26

3 réponses

Meilleure réponse

Utilisez un ArrayList pour enregistrer tous les objets Room dans la classe House et parcourez la liste et additionnez les zones:

public class House {

    public Address addressOfHouse;
    public Room bedroom;
    public Room childrenroom;
    public Room kitchen;
    public Room livingroom;
    public Room lobby;
    public Room workroom;
    private ArrayList<Room> rooms;

    public House (){
        addressOfHouse=new Address();

        rooms = new ArrayList<>();

        bedroom=new Room();
        rooms.add(bedroom);
        childrenroom=new Room();
        rooms.add(childrenroom);
        kitchen=new Room();
        rooms.add(kitchen);
        livingroom=new Room();
        rooms.add(livingroom);
        lobby=new Room();
        rooms.add(lobby);
        workroom=new Room();
        rooms.add(workroom);
    }

    public double totalArea (int floor){
        double totalArea=0.0;

        for (Room room : rooms) {
            if (room.getFloor() == floor)
                totalArea += room.getArea();
        }

        return totalArea;
    }

    public double totalArea (){
        return totalArea(1);
    }

}

La méthode totalArea(int floor) renvoie l'aire du i étage.
Donc, si vous voulez que la méthode totalArea() renvoie la surface du 1er étage, vous devez retourner totalArea(1).
Peut-être devriez-vous changer le nom de totalArea() en totalAreaofFirstFloor()?
Tous les objets Room de la classe House doivent être initialisés avec des valeurs valides pour leurs propriétés.

1
forpas 20 nov. 2018 à 17:45

Tout d'abord, vous avez besoin d'un constructeur Room qui accepte les paramètres (pour l'instant vous utilisez le constructeur par défaut, donc chaque variable est définie sur 0 / null)

public Room(String typeOfRoom /* ... other params */){ 
   this.typeOfRoom = typeOfRoom;
   //assign other params
}

Ensuite, vous devrez écrire la méthode:

 public double totalArea (int floor){
    double totalArea=0.0;

    //check if bedroom is on this floor:
    if(bedroom.getFloor() == floor) {
       totalArea += bedroom.getArea();
    }
    //now do this for all other rooms

    return totalArea;
}

Peut-être plus élégant de rassembler les pièces dans quelque chose et d'itérer à travers cela, mais cela fera également l'affaire.

1
Gtomika 20 nov. 2018 à 17:52

Pour calculer la surface totale de tous les étages de toutes les pièces, vous pouvez écrire une méthode comme celle-ci,

public double totalArea() {
    double totalArea = 0;
    totalArea += bedroom.getArea();
    totalArea += childrenroom.getArea();
    totalArea += kitchen.getArea();
    totalArea += livingroom.getArea();
    totalArea += lobby.getArea();
    totalArea += workroom.getArea();

    return totalArea;
}

Mais vous devez créer un constructeur approprié de la classe Room, afin de pouvoir créer correctement l'objet Room et y spécifier les paramètres. Le constructeur de pièce peut être quelque chose comme ça,

public Room(String typeOfRoom, double area, int floor, int windowsCount) {
    this.typeOfRoom = typeOfRoom;
    this.area = area;
    this.floor = floor;
    this.windowsCount = windowsCount;
}

En outre, vous devez créer un meilleur constructeur d'objet Maison, où il peut prendre des objets de pièce de différents types de pièce. Votre constructeur de maison peut être quelque chose comme ça,

public House(Address addressOfHouse, Room bedroom, Room childrenroom, Room kitchen, Room livingroom, Room lobby, Room workroom) {
    this.addressOfHouse = addressOfHouse;
    this.bedroom = bedroom;
    this.childrenroom = childrenroom;
    this.kitchen = kitchen;
    this.livingroom = livingroom;
    this.lobby = lobby;
    this.workroom = workroom;
}

Vous devez également améliorer votre méthode de calcul de la surface d'un étage particulier en quelque chose comme ceci,

public double totalArea(int floor) {
    double totalArea = 0;
    totalArea += bedroom.getFloor() == floor ? bedroom.getArea() : 0;
    totalArea += childrenroom.getFloor() == floor ? childrenroom.getArea() : 0;
    totalArea += kitchen.getFloor() == floor ? kitchen.getArea() : 0;
    totalArea += livingroom.getFloor() == floor ? livingroom.getArea() : 0;
    totalArea += lobby.getFloor() == floor ? lobby.getArea() : 0;
    totalArea += workroom.getFloor() == floor ? workroom.getArea() : 0;

    return totalArea;
}

Et puis enfin, vous pouvez écrire du code dans la méthode principale pour tester son fonctionnement,

public static void main(String args[]) {
    Room bedroom = new Room("bedroom", 200, 1, 4);
    Room childrenroom = new Room("childrenroom", 180, 1, 2);
    Room kitchen = new Room("kitchen", 160, 2, 2);
    Room livingroom = new Room("livingroom", 220, 2, 2);
    Room lobby = new Room("lobby", 140, 2, 4);
    Room workroom = new Room("workroom", 100, 2, 2);
    Address address = new Address();

    House house = new House(address, bedroom, childrenroom, kitchen, livingroom, lobby, workroom);

    // total area of all rooms
    System.out.println("Total area: " + house.totalArea());

    // total area of all rooms on floor 1
    System.out.println("Total area on floor 1: " + house.totalArea(1));

    // total area of all rooms on floor 2
    System.out.println("Total area on floor 2: " + house.totalArea(2));
}

Cela imprime la sortie suivante comme prévu,

Total area: 1000.0
Total area on floor 1: 380.0
Total area on floor 2: 620.0

J'espère que cela vous aidera et faites-moi savoir si vous avez encore des questions.

1
Pushpesh Kumar Rajwanshi 20 nov. 2018 à 18:42