• 0.00

  • +1.18

level27.lesson15.big01 Задание 16

пАмагите. Прежде чем просить о помощи, я помучился недельку с задачей, перечитал все что можно. Но решения так и не нашел. Просьба помочь.



public class DirectorTablet
{
    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);

    public void printAdvertisementProfit()
    {
        double total = 0;
        for (Map.Entry<Date, Double> entry : StatisticManager.getInstance().getTotalMoneyPerDay().entrySet()) {

            double e = entry.getValue();
            ConsoleHelper.writeMessage(String.format(Locale.ENGLISH, "%s - %.2f", simpleDateFormat.format(entry.getKey()), e));
            total += e;
        }
        if (total > 0) ConsoleHelper.writeMessage(String.format(Locale.ENGLISH, "Total - %.2f",total));
    }

    public void printCookWorkloading()
    {
        for (Map.Entry<Date, TreeMap<String, Integer>> pair : StatisticManager.getInstance().getCookInfo().entrySet()) {
            ConsoleHelper.writeMessage(simpleDateFormat.format(pair.getKey()));
            for (Map.Entry<String, Integer> pair2 : pair.getValue().entrySet()) {
                if (pair2.getValue() > 0) {
                    ConsoleHelper.writeMessage(String.format(Locale.ENGLISH, "%s - %d min", pair2.getKey(), pair2.getValue()));
                }
            }
        }

    }

    public void printActiveVideoSet(){}

    public void printArchivedVideoSet(){}
}




public class StatisticManager
{
    private static StatisticManager ourInstance = new StatisticManager();
    public StatisticStorage statisticStorage = new StatisticStorage();
    public Set<Cook> cook = new HashSet<Cook>();

    public static StatisticManager getInstance()
    {
        return ourInstance;
    }

    private StatisticManager()
    {
    }

    public void register(EventDataRow data)
    {
        statisticStorage.put(data);
    }
    public void register(Cook cook)
    {
        this.cook.add(cook);
    }

    public Map<Date, Double> getTotalMoneyPerDay()
    {
        Map<Date, Double> resultMap = new TreeMap<>(Collections.reverseOrder());

        for (EventDataRow event : statisticStorage.getList(EventType.SELECTED_VIDEOS)) {
            Date date = dateWithoutTime(event.getDate());
            VideoSelectedEventDataRow eventData = (VideoSelectedEventDataRow) event;
            if (resultMap.containsKey(date)) {
                resultMap.put(date, resultMap.get(date) + (0.01d * (double) eventData.getAmount()));
            } else {
                resultMap.put(date, (0.01d * (double) eventData.getAmount()));
            }
        }
        return resultMap;
    }

    public Map<Date,TreeMap<String, Integer>> getCookInfo()
    {
        TreeMap<Date, TreeMap<String, Integer>> map = new TreeMap<>(Collections.reverseOrder());

        for (EventDataRow e : statisticStorage.getList(EventType.COOKED_ORDER)) {
            Date date = dateWithoutTime(e.getDate());
            CookedOrderEventDataRow cook = (CookedOrderEventDataRow) e;

            int time = cook.getTime();
            if (time == 0) continue;
            if (time % 60 == 0) time = time / 60;
            else time = time / 60 + 1;

            if (map.containsKey(date)) {
                TreeMap<String, Integer> value = map.get(date);
                if (value.containsKey(cook.getCookName())) {
                    value.put(cook.getCookName(), value.get(cook.getCookName()));
                }
                else value.put(cook.getCookName(), time);
            }
            else {
                TreeMap<String, Integer> value = new TreeMap<>();
                value.put(cook.getCookName(), time);
                map.put(date, value);
            }
        }
        return map;
    }


    private Date dateWithoutTime(Date date) {
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }


    private static class StatisticStorage
    {
        public Map<EventType, List<EventDataRow>> list = new HashMap();

        private  StatisticStorage()
        {
            for(EventType eventType: EventType.values())
            {
                list.put(eventType, new ArrayList<EventDataRow>());
            }
        }

        private void put(EventDataRow data)
        {
            list.get(data.getType()).add(data);
        }

        public List<EventDataRow> getList(EventType even)
        {
            return list.get(even);
        }
    }
}
  • ,

level26.lesson15.big01 Задание 10

Добрый день. Прошу у всех помощи. Сижу с задачей 2 неделю, перепробовал большое кол-во вариантов написания кода. Ничего не принимает. Сейчас пишет, что не компилируется на сервере. Но вывод правильный.
Задание 10
Сегодня мы займемся командой WithdrawCommand - это самая сложная операция.

1. Реализуйте следующий алгоритм для команды WithdrawCommand:
1.1. Считать код валюты (метод уже есть)
1.2. Получить манипулятор для этой валюты.
1.3. Пока пользователь не введет корректные данные выполнять:
1.3.1. Попросить ввести сумму
1.3.2. Если введены некорректные данные, то сообщить об этом пользователю и вернуться к п. 1.3.
1.3.3. Проверить, достаточно ли средств на счету.
Для этого в манипуляторе создайте метод boolean isAmountAvailable(int expectedAmount), который вернет true, если денег достаточно для выдачи.
Если недостаточно, то вернуться к п. 1.3.
1.3.4. Списать деньги со счета. Для этого в манируляторе создайте метод
Map<Integer, Integer> withdrawAmount(int expectedAmount), который вернет карту Map<номинал, количество>.
Подробно логику этого метода смотрите в п.2.
1.3.5. Вывести пользователю результат из п. 1.3.4. в следующем виде:
<табуляция>номинал - количество
Сортировка - от большего номинала к меньшему.
Вывести сообщение об успешной транзакции.
1.3.6. Перехватить исключение NotEnoughMoneyException, уведомить юзера о нехватке банкнот и вернуться к п. 1.3.

2. Логика основного метода withdrawAmount:
2.1. Внимание!!! Метод withdrawAmount должен возвращать минимальное количество банкнот, которыми набирается запрашиваемая сумма.
Используйте Жадный алгоритм (use google).
Если есть несколько вариантов, то использовать тот, в котором максимальное количество банкнот высшего номинала.
Если для суммы 600 результат - три банкноты: 500 + 50 + 50 = 200 + 200 + 200, то выдать первый вариант.
Пример, надо выдать 600
В манипуляторе есть следующие банкноты:
500 - 2
200 - 3
100 - 1
50 - 12
Результат должен быть таким:
500 - 1
100 - 1
т.е. всего две банкноты (это минимальное количество банкнот) номиналом 500 и 100.

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

2.3. метод withdrawAmount должен кидать NotEnoughMoneyException, если купюрами невозможно выдать запрашиваемую сумму.
Пример, надо выдать 600
В манипуляторе есть следующие банкноты:
500 - 2
200 - 2
Результат - данными банкнотами невозможно выдать запрашиваемую сумму. Кинуть исключение.
Не забудьте, что в некоторых случаях картой кидается ConcurrentModificationException.

public Map<Integer, Integer> withdrawAmount(int expectedAmount) throws NotEnoughMoneyException
    {
        int sum = expectedAmount;
        HashMap<Integer, Integer> temp = new HashMap<>();
        temp.putAll(denominations);
        ArrayList<Integer> list = new ArrayList<>();
        for (Map.Entry<Integer, Integer> pair : temp.entrySet())
            list.add(pair.getKey());

        Collections.sort(list);
        Collections.reverse(list);

        TreeMap<Integer, Integer> result = new TreeMap<>(new Comparator<Integer>()
        {
            @Override
            public int compare(Integer o1, Integer o2)
            {
                return o2.compareTo(o1);
            }
        });

        for (Integer aList : list) {
            int key = aList;
            int value = temp.get(key);
            while (true) {
                if (sum < key || value <= 0) {
                    temp.put(key, value);
                    break;
                }
                sum -= key;
                value--;

                if (result.containsKey(key))
                    result.put(key, result.get(key) + 1);
                else
                    result.put(key, 1);
            }
        }

        if (sum > 0)
            throw new NotEnoughMoneyException();
        else
        {
            for (Map.Entry<Integer, Integer> pair : result.entrySet())
                ConsoleHelper.writeMessage("\t" + pair.getKey() + " - " + pair.getValue());

            denominations.clear();
            denominations.putAll(temp);
            ConsoleHelper.writeMessage("Transaction was successful!");
        }
        return result;
    }


public void execute() throws InterruptOperationException
    {
        String currencyCode = ConsoleHelper.askCurrencyCode();
        CurrencyManipulator currencyManipulator = CurrencyManipulatorFactory.getManipulatorByCurrencyCode(currencyCode);
        int sum;
        while(true)
        {
            ConsoleHelper.writeMessage("Введите сумму");
            String s = ConsoleHelper.readString();
            try
            {
                sum = Integer.parseInt(s);
            } catch (NumberFormatException e)
            {
                ConsoleHelper.writeMessage("Только цифры");
                continue;
            }
            if (sum <= 0)
            {
                ConsoleHelper.writeMessage("Цифры больше нуля");
                continue;
            }
            if (!currencyManipulator.isAmountAvailable(sum))
            {
                ConsoleHelper.writeMessage("Не хватает денег");
                continue;
            }
            try
            {
                currencyManipulator.withdrawAmount(sum);
            } catch (NotEnoughMoneyException e)
            {
                ConsoleHelper.writeMessage("Не хватает банкнот");
                continue;
            }
            break;
        }

    }

Ошибка сервера при сдаче задач

Всем привет. Помогите плиз. Все было нормально как вдруг при сдаче задач появляется «Неизвестная ошибка при работе с сервером» — что может это значить? Как решить?
  • ,

level15.lesson12.home04

Сначала 3 дня мучаюсь решаю сам. Потом прошу помощи. пАмАгите!

1. Найти в гугле пример для — Singleton pattern Lazy initialization.
2. По образу и подобию в отдельных файлах создать три синглтон класса Sun, Moon, Earth.
3. Реализовать интерфейс Planet для классов Sun, Moon, Earth.
4. В статическом блоке класса Solution вызвать метод readKeyFromConsoleAndInitPlanet.
5. Реализовать функционал метода readKeyFromConsoleAndInitPlanet:
5.1. С консоли считать один параметр типа String.
5.2. Если параметр равен одной из констант интерфейса Planet, то создать соответствующий объект и присвоить его Planet thePlanet, иначе обнулить Planet thePlanet.
5.3. Сравнивать введенный параметр можно только с константами из Planet, нельзя создавать свои строки.


public class Solution {

    public static void main(String[] args)
    {}

    public static Planet thePlanet;
    static {
        try
        {
            readKeyFromConsoleAndInitPlanet();
        }
        catch (IOException e)
        {

        }
    }
    //add static block here - добавьте статический блок тут

    public static void readKeyFromConsoleAndInitPlanet() throws IOException
    {
        // implement step #5 here - реализуйте задание №5 тут
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        switch (reader.readLine())
        {
            case Planet.SUN:
                thePlanet = Sun.getInstance();
                break;
            case Planet.MOON:
                thePlanet = Moon.getInstance();
                break;
            case Planet.EARTH:
                thePlanet = Earth.getInstance();
                break;
            default:
                thePlanet = null;
        }
    }
}

public class Sun implements Planet {
    private static Sun  instance;

    private Sun (){}

    public static Sun  getInstance(){
        if(instance == null){
            instance = new Sun ();
        }
        return instance;
    }
}
  • ,

level15.lesson02.task04 - не могу решить. Уже всё перечитал.

Прежде чем написать сюда, посидел недельку, почитал, изучил. Но не могу найти ошибку. Помогайте =)


package com.javarush.test.level15.lesson02.task04;

/* ООП - книги
1. Создайте public static класс MarkTwainBook, который наследуется от Book. Имя автора [Mark Twain]. Параметр конструктора - имя книги.
2. В классе MarkTwainBook реализуйте все абстрактные методы.
3. Для метода getBook расширьте тип возвращаемого результата.
4. Создайте по аналогии AgathaChristieBook. Имя автора [Agatha Christie].
5. В классе Book реализуйте тело метода getOutputByBookType так, чтобы он возвращал:
5.1. agathaChristieOutput для книг Агаты Кристи;
5.2. markTwainOutput для книг Марка Твена.
*/

import java.util.LinkedList;
import java.util.List;

public class Solution {
    public static void main(String[] args) {
        List<Book> books = new LinkedList<Book>();
        books.add(new MarkTwainBook("Tom Sawyer"));
        books.add(new AgathaChristieBook("Hercule Poirot"));
        System.out.println(books);
    }

    public abstract static class Book {
        private String author;

        public Book(String author) {
            this.author = author;
        }

        public abstract Book getBook();

        public abstract String getName();

        private String getOutputByBookType() {
            String agathaChristieOutput = author + ", " + getBook().getName() + " is a detective";
            String markTwainOutput = getBook().getName() + " book was written by " + author;

            String output = "output";
            //Add your code here
            if (this instanceof AgathaChristieBook)
            {
                output = agathaChristieOutput;
            }
            if (this instanceof MarkTwainBook)
            {
                output = markTwainOutput;
            }


            return output;
        }

        public String toString() {
            return getOutputByBookType();
        }
    }
    public static class MarkTwainBook extends Book
    {
        private String bookName;

        public MarkTwainBook(String bookName)
        {
            super("Mark Twain");
            this.bookName = bookName;
        }
        public Book getBook()
        {
            return this;
        }
        public String getName()
        {
            return this.bookName;
        }
    }

    public static class AgathaChristieBook extends Book
    {
        private String bookName;

        public AgathaChristieBook(String bookName)
        {
            super("Agatha Christie");
            this.bookName = bookName;
        }
        public Book getBook()
        {
            return this;
        }
        public String getName()
        {
            return this.bookName;
        }
    }
}