Введите массив объектов в Arraylist объектов и измените атрибут - PullRequest
0 голосов
/ 10 апреля 2020

Я надеюсь, что кто-то может мне помочь, я борюсь с этим со вчерашнего дня ...

Я сейчас работаю над проектом Системы управления гостиницей. То, что я пытаюсь сделать, это поместить массив [] Clients в ArrayList of Rooms, а затем установить для этого атрибута комнаты значение «busy = true» и сохранить его, так что если я попытаюсь использовать эту комнату для другого клиента, которого нет » не позволяй мне.

Класс комнаты

public class Room {
    private int number;
    private float price= 30.5f;
    private boolean occupied = false;
    private Client[] hosts;

    public Room(int number, Client[] hosts) {
        this.number= number;
        this.hosts= hosts;
    }

    public void setOccupied() {
        this.occupied = true;
    }
}

Класс клиента

public class Client {
    private String id;
    private String name;
    private String lastName;

    public Client(String id, String name, String lastName) {
        this.id = id;
        this.name= name;
        this.lastName= lastName;
    }
}

Это то, что у меня есть на моем Main до сих пор ... я вызов следующей функции

public void checkIn(ArrayList<Room> myRooms){
        int roomNumber;
        String id;
        String name;
        String lastName;

        Scanner input = new Scanner(System.in);
        int people = input.nextInt();
        Client[] array = new Client[people];


        for (int i = 0; i < people; i++) {
            System.out.println("Enter ID" + (i+1));
            id = input.next();

            System.out.println("Enter name " + (i+1));
            name= input.next();

            System.out.println("Enter last name " + (i+1));
            lastName= input.next();

            array[i] = new Client(id,name,lastName);

        }

        System.out.print("Assign to room number... : ");
        roomNumber = input.nextInt();

        myRooms.add(new Room(roomNumber, array));

        //here i tried doing:
        //room.set().setOccupied();
        //room.set(roomNumber).setOccupied();

        //but .set() expects an index...

    }

Как только я получу это, я хочу создать функцию, которая показывает список занятых комнат

Извините, мой английский sh, так как я испанец sh

Ответы [ 2 ]

0 голосов
/ 11 апреля 2020

Поскольку вы не создаете ссылочный экземпляр Room при вызове myRooms.add(new Room(roomNumber, array));, вы не можете сказать room.setOccupied(); Это можно исправить двумя способами: во-первых, как сказал Bahij.Mik, вы можете позвонить this.occupied = true; в комнате конструктора. Или вы можете просто создать новый экземпляр Room в вашем методе checkIn. Это будет выглядеть так:

    Room newRoom = new Room(roomNumber, array);
    newRoom.setOccupied();

всякий раз, когда кто-то регистрируется.

Что касается создания функции для проверки того, какие комнаты заняты, создайте массив номеров комнат и затем попытайтесь:

    public String[][] findOccupiedRooms(int[] roomNumbers) {
        String[][] roomList = new String[roomNumbers.length][1];
        for(int i = 0; i < roomNumbers.length; i++) {
           if(roomNumbers[i].isOccupied() == true) {
                 roomList[i][0] = "" + roomNumbers[i];
                 roomList[i][1] = "occupied";
           } else {
                 roomList[i][0] = "" + roomNumbers[i];
                 roomList[i][1] = "vacant";
           }
        }
        return roomList[][];
     }

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

0 голосов
/ 10 апреля 2020

Несколько способов справиться с этим, вероятно, я бы перегрузил конструктор моей комнаты, чтобы вы могли установить, занят ли он или нет, когда вы его создадите, например:

public Room(int number, Client[] hosts, boolean occupied)
    {
        this.number = number;
        this.hosts = hosts;
        this.occupied = true;
    }

и в вашем checkIn() метод просто добавьте true при создании экземпляра вашей комнаты в списке:

myRooms.add(new Room(roomNumber, array, true));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...