Получить самый популярный номер в отеле на основе длины бронирования - PullRequest
0 голосов
/ 24 марта 2020

Я изо всех сил пытаюсь выяснить, как вернуть самые популярные гостиничные номера. В основном у меня есть ArrayList объектов бронирования, которые включают название комнаты и продолжительность бронирования, которые были прочитаны из файла CSV. Мне нужно выяснить, как вернуть наиболее популярные номера, которые я могу понять, как это сделать. Мне нужно как-то сложить все индивидуальные длины заказов для каждой комнаты.

this.roomName = roomName;
this.date = date;
this.time = time;
this.lengthOfBooking = lengthOfBooking;


 public String[] getMostPopularRooms(int n){
    String[] popularRooms = new String[n];

    return popularRooms;

 } 

1 Ответ

0 голосов
/ 24 марта 2020

Вы создаете класс Booking, который содержит переменные-члены, такие как продолжительность пребывания. Подобно тому, что вы показываете в верхней части вашего примера кода. (Ваш getMostPopularRooms метод не принадлежит этому классу. Он должен go в другом месте.)

Вы собираете Booking объектов, очевидно считанных из CSV файл в соответствии с вашим вопросом. Каждая строка в CSV используется для создания одного Booking объекта. Совет: используйте библиотеку, такую ​​как Apache Commons CSV , чтобы облегчить задачу чтения файла CSV. Вы создадите List или Set из Booking объектов.

Создайте Map для хранения названий номеров, для каждого из которых вы будете хранить общее количество дней для всех объектов бронирования. , Возможно TreeMap, чтобы держать номера комнат в порядке. Из вашего Вопроса я делаю вывод, что вы отслеживаете название каждой комнаты, используя String.

Совет: Если бы вы добавили библиотеку ThreeTen-Extra в свой проект, вы могли бы использовать здесь тип Days вместо Integer. Для выполнения домашнего задания вместо реальной работы используйте Integer.

Для эффективности вы можете установить начальную вместимость для известного количества комнат.

Map< String , Integer > roomPopularity = new TreeMap<>( numberOfRooms ) ;

Теперь l oop ваша коллекция Booking объектов. Для каждого найдите соответствующий ключ в Map. Если его еще нет, добавьте ключ к карте. Затем найдите объект Integer для этой комнаты и добавьте к этому числу количество дней, указанное в бронировании.

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

Все эти фрагменты много раз уже были рассмотрены в Переполнении стека. Чтобы узнать больше, поищите в существующих Вопросах и ответах.

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

Возможно, ваш учитель намеревается использовать простые массивы, а не коллекции. Если это так, логи c похожи. Создайте пару массивов, один для имени комнаты и один для общего количества дней. Когда вы читаете каждый CSV, ищите имя комнаты в первом массиве. Если не найдено, добавьте номер. Затем посмотрите тот же номер строки во втором массиве, чтобы узнать общее количество дней. Добавьте количество дней во входящей строке к общему количеству дней. Когда закончите с CSV, l oop элементов массива общих дней, ища наибольшее число. Затем отскок от массива имен массивов, чтобы получить имя в соответствующей строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...