Я написал, конечно, лютый, дикий, странный код (хотя мне он чертовски нравится).
Естественно выводы работают корректно - даты идут в порядке убывания, формат дабл, считается сумма заказов корректно с любым количеством заказов, форматирование соответствует. Че этому псу сутулому не нравится?)
Чтоб не мучить никого страшным кодом, вкратце опишу алгоритм:
1) Создаем тримапу с компаратором в обратном порядке, которую заполним и передадим на директорский планшет
2) сделаем метод, который возвращаем список событий (аргумент - тип событий). в этом списке и хранятся собственно все показы видео
3) создаем 7 пустых дат, соответствующих дням недели
4) итерируемся по списку событий, в каждой итерации вытаскиваем объект события, из него вытаскиваем цену показа и дату.
5) дальше самое веселое. В свитч блоке мы мы проверяем присвоено ли уже текущей дате значение. Если нет - присваиваем 0 - дату воскр, 1 - дату пон и так далее. После чего добавляем в мапу дату и первое значение. Зачем это нужно. Время (часы, минуты) - нас не интересует, а добавлять в карту для каждого заказала отдельную дату - безумие. Хотя тут не уверен, может так надо было сделать? Но тогда мы сильно раздуем карту. Чего ради? Но может валька именно этого хочет? Типа 100 заказов на каждый день а потом в планшете директора уже считать в свитч блоке суммы и выводить?)
6) Если у нас дата в списке есть, мы обновляем значения value для этой даты
7) Возвращаем мапу директору и там уже через итерацию и форматы выводим нужный результат.
Странно что я по такой же схеме сделал с поварами - и валидатор принял. Но там вообще упоротый варик с картой карт)
У меня три предположения -
1)нужно пихать в карту каждый заказ отдельной датой и потом считать.
2) где то есть косяк в коде
3) валидатор валера)
Update: разобрался, оказалось, что опять условия задачи некорректные. Код полностью рабочий, правила форматирования цифр вывода нигде не прописано. В итоге не принимало потому что не такое - String.format("%.2f", 1.0 * sum / 100) - вот форматирование было. А что оно должно быть такое я как мог догадаться?)
package com.javarush.task.task27.task2712;
import com.javarush.task.task27.task2712.ad.AdvertisementManager;
import com.javarush.task.task27.task2712.ad.NoVideoAvailableException;
import com.javarush.task.task27.task2712.kitchen.Order;
import java.io.IOException;
import java.util.Observable;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Tablet extends Observable {
private final int number;
private static Logger logger = Logger.getLogger(Tablet.class.getName());
public Tablet(int number) {
this.number = number;
}
public Order createOrder() {
Order order = null;
try {
order = new Order(this);
if (order.isEmpty()) {
return null;
}
AdvertisementManager advertisementManager = new AdvertisementManager(order.getTotalCookingTime() * 60);
advertisementManager.processVideos();
setChanged();
notifyObservers(order);
} catch (IOException e) {
logger.log(Level.SEVERE, "Console is unavailable.");
} catch (NoVideoAvailableException nve) {
logger.log(Level.INFO, "No video is available for the order " + order);
}
return order;
}
public String toString() {
return "Tablet{" +
"number=" + number +
'}';
}
}