• ,

task.task26.task2613 Задание 8

CashMachine (8)

Пора привести в порядок наш main, уж очень там всего много, чего не должно быть.

1. Перенеси логику из main в DepositCommand и InfoCommand.

Проверим, что там стало с main? Цикл, в котором спрашиваем операцию у пользователя, а потом вызываем метод у CommandExecutor.

И так до бесконечности… надо бы придумать условие выхода из цикла.

Исправь цикл, чтоб он стал do-while. Условие выхода — операция EXIT.

2. Давай запустим прогу и пополним счет на EUR 100 2 и USD 20 6, и посмотрим на INFO.

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

Давай улучшим логику InfoCommand. Надо вывести баланс по каждому манипулятору.

2.1. В классе CurrencyManipulatorFactory создай статический метод getAllCurrencyManipulators(), который вернет Collection всех манипуляторов.

У тебя все манипуляторы хранятся в карте, не так ли? Если нет, то отрефактори.

2.2. В InfoCommand в цикле выведите [код валюты — общая сумма денег для выбранной валюты].

Запустим прогу и пополним счет на EUR 100 2 и USD 20 6, и посмотрим на INFO.

Все работает правильно?

EUR — 200

USD — 120

Отлично!

3. Запустим прогу и сразу первой операцией попросим INFO. Ничего не вывело? Непорядок.

Добавь в манипулятор метод boolean hasMoney(), который будет показывать, добавлены ли какие-то банкноты или нет.

4. В InfoCommand используй метод п.3. и выведите фразу «No money available.«, если нет денег в банкомате.


Никак не могу пройти это задание, валидатор агрится на следующее — В классе InfoCommand в методе execute() для каждого манипулятора выведи: «код валюты — общая сумма денег для выбранной валюты», если денег нет в банкомате выведи фразу, «No money available.». Перепробовал кучу вариантов, включая читерство — может кто подскажет что не так?

class InfoCommand implements Command {
    @Override
    public void execute()
    {
        boolean isMoney = false;

            for (CurrencyManipulator currencyManipulator: CurrencyManipulatorFactory.getAllCurrencyManipulators())
            {
                if (currencyManipulator.hasMoney())
                {
                    if (currencyManipulator.getTotalAmount() > 0){
                    ConsoleHelper.writeMessage(currencyManipulator.getCurrencyCode() + " - " + currencyManipulator.getTotalAmount());
                    isMoney = true;
                    }
                }
            }
            if (!isMoney) ConsoleHelper.writeMessage("No money available.");



    }
}
class DepositCommand implements Command {
    @Override
    public void execute()
    {

        String s = ConsoleHelper.askCurrencyCode();
        if (checkExp(s)){
        CurrencyManipulator currencyManipulator = CurrencyManipulatorFactory.getManipulatorByCurrencyCode(s);
        String[] twoDigits = ConsoleHelper.getValidTwoDigits(s);
        try {

        currencyManipulator.addAmount(Integer.parseInt(twoDigits[0]), Integer.parseInt(twoDigits[1]));
        }
        catch (NumberFormatException e)
        {
            ConsoleHelper.writeMessage("Please type the data again.");
        }
        }

    }

    public boolean checkExp(String s)
    {
        return s.matches("^[a-zA-Z]+$");

    }
}
public class CurrencyManipulator
{
    private String currencyCode;
    private Map<Integer, Integer> denominations = new HashMap<>();

    public String getCurrencyCode() {
        return currencyCode;
    }

    public CurrencyManipulator(String currencyCode) {
        this.currencyCode = currencyCode;
    }

    public void addAmount(int denomination, int count)
    {
        if (denominations.containsKey(denomination))
        {
            denominations.put(denomination, denominations.get(denomination) + count);
        }
        else denominations.put(denomination, count);
    }

    public int getTotalAmount()
    {
        int a = 0;
        for (Map.Entry<Integer, Integer> pair: denominations.entrySet())
        {
            a += pair.getKey() * pair.getValue();

        }
        return a;
    }

    public boolean hasMoney()
    {
        int a = 0;
        for (Integer i: denominations.values())
        {
            a += i;

        }
        return a != 0;

    }
}
public class CashMachine
{
    public static void main(String[] args) throws IOException, InterruptOperationException
    {
        Operation operation;
        Locale.setDefault(Locale.ENGLISH);
        do {
            operation = ConsoleHelper.askOperation();
            CommandExecutor.execute(operation);


        }
        while (!operation.equals(Operation.EXIT));
    }
}

Комментариев нет

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.