Здравствуйте.
Код писал сам, и вроде как все логично, но не принимает, вывод условию по-моему соответствует, может кто сможет подсказать, куда обратить внимание. Спасибо.
public void processVideos() {
List<Advertisement> advertisementList = new ArrayList<>();
for (Advertisement advertisement : storage.list()) {
if (advertisement.duration <= timeSeconds && advertisement.hits > 0) {
advertisementList.add(advertisement);
}
}
if (advertisementList.isEmpty()) {
throw new NoVideoAvailableException();
}
backpack(advertisementList);
List<List<Advertisement>> newListList = new ArrayList<>();
for (List<Advertisement> list : listList) {
if (duration(list) <= timeSeconds)
newListList.add(list);
}
Collections.sort(newListList, Comparator.comparing(this::initialAmount));
Collections.sort(newListList, Comparator.comparing(this::duration));
List<Advertisement> result = newListList.get(0);
Collections.sort(result, Comparator.comparing(Advertisement::getDuration));
for (Advertisement advertisement : result) {
displayInPlayer(advertisement);
advertisement.revalidate();
}
}
public void backpack(List<Advertisement> list) {
if (!list.isEmpty()) {
listList.add(list);
}
for (int i = 0; i < list.size(); i++) {
List<Advertisement> newList = new ArrayList<>(list);
newList.remove(i);
backpack(newList);
}
}
public long initialAmount(List<Advertisement> list) {
long initialAmount = 0;
for (Advertisement advertisement : list) {
initialAmount = initialAmount + advertisement.amountPerOneDisplaying;
}
return initialAmount;
}
public int duration(List<Advertisement> list) {
int duration = 0;
for (Advertisement advertisement : list) {
duration = duration + advertisement.duration;
}
return duration;
}
private void displayInPlayer(Advertisement advertisement) {
System.out.println(advertisement.getName() + " is displaying... " + advertisement.getAmountPerOneDisplaying() +
", " + (1000 * advertisement.getAmountPerOneDisplaying() / advertisement.getDuration()));
}
}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;
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);
try {
AdvertisementManager manager = new AdvertisementManager(order.getTotalCookingTime() * 60);
manager.processVideos();
} catch (NoVideoAvailableException e) {
logger.log(Level.INFO, "No video is available for the order " + order);
}
if (!order.isEmpty()) {
setChanged();
notifyObservers(order);
}
return order;
} catch (IOException e) {
logger.log(Level.SEVERE, "Console is unavailable.");
} finally {
return order;
}
}
@Override
public String toString() {
return "Tablet{" +
"number=" + number +
'}';
}
}