Уже никакого терпения не хватает, будьте добры, укажите почему может не приниматься:
Задание 8 Пора привести в порядок наш main, уж очень там всего много, чего не должно быть. 1. Перенесите логику из main в DepositCommand и InfoCommand Проверим, что там стало с main? Цикл, в котором спрашиваем операцию у пользователя, а потом вызываем метод у CommandExecutor. И так до бесконечности... надо бы придумать условие выхода из цикла. Исправь цикл, чтоб он стал do-while. Условие выхода - операция EXIT. 2. Давайте запустим прогу и пополним счет на EUR 100 2 и USD 20 6, и посмотрим на INFO. Ничего не понятно, т.к. создались 2 манипулятора: первый для EUR, второй для USD. Давайте улучши3м логику 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.", если нет денег в банкомате.
package com.javarush.test.level26.lesson15.big01; import java.util.HashMap; import java.util.Map; public class CurrencyManipulator { private String currencyCode; private static Map denominations = new HashMap<>(); public CurrencyManipulator(String currencyCode) { this.currencyCode = currencyCode; } public String getCurrencyCode() { return 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 boolean hasMoney(){ if (denominations.isEmpty()) return false; else { for (Map.Entry pair : denominations.entrySet()){ if (pair.getValue()!=0) return true; } return false; } } public int getTotalAmount(){ int result = 0; for(Map.Entry pair : denominations.entrySet()) result = result + (pair.getKey() * pair.getValue()); return result; } }
package com.javarush.test.level26.lesson15.big01.command; import com.javarush.test.level26.lesson15.big01.ConsoleHelper; import com.javarush.test.level26.lesson15.big01.CurrencyManipulator; import com.javarush.test.level26.lesson15.big01.CurrencyManipulatorFactory; import java.util.Collection; class InfoCommand implements Command{ @Override public void execute() { boolean money = false; ConsoleHelper.writeMessage("Information: "); for (CurrencyManipulator cur : CurrencyManipulatorFactory.getAllCurrencyManipulators()){ if (cur.hasMoney()){ if (cur.getTotalAmount() > 0) { ConsoleHelper.writeMessage(cur.getCurrencyCode() + " - " + cur.getTotalAmount()); money = true; } } } if (!money) ConsoleHelper.writeMessage("No money available."); } }
package com.javarush.test.level26.lesson15.big01.command; import com.javarush.test.level26.lesson15.big01.ConsoleHelper; import com.javarush.test.level26.lesson15.big01.CurrencyManipulator; import com.javarush.test.level26.lesson15.big01.CurrencyManipulatorFactory; class DepositCommand implements Command{ @Override public void execute() { ConsoleHelper.writeMessage("Depositing..."); String curCod = ConsoleHelper.askCurrencyCode(); CurrencyManipulator manipulator = CurrencyManipulatorFactory.getManipulatorByCurrencyCode(curCod); String[] row = ConsoleHelper.getValidTwoDigits(curCod); try { int numb1 = Integer.parseInt(row[0]); int numb2 = Integer.parseInt(row[1]); manipulator.addAmount(numb1, numb2); ConsoleHelper.writeMessage(String.format("%d %s was deposited successfully", numb1 * numb2, curCod)); } catch(NumberFormatException e){ ConsoleHelper.writeMessage("Please enter the valid data."); } } }
package com.javarush.test.level26.lesson15.big01; import com.javarush.test.level26.lesson15.big01.command.CommandExecutor; import com.javarush.test.level26.lesson15.big01.exception.InterruptOperationException; import java.util.Locale; /** * Created by Stanislav on 19.08.2016. */ public class CashMachine { public static void main(String[] args) { Locale.setDefault(Locale.ENGLISH); Operation s = null; do { try { s = ConsoleHelper.askOperation(); CommandExecutor.execute(s); } catch (InterruptOperationException e) { e.printStackTrace(); } } while (s != Operation.EXIT); } }

package com.javarush.test.level26.lesson15.big01; import java.util.Collection; import java.util.HashMap; import java.util.Map; /** * Created by Stanislav on 19.08.2016. */ public class CurrencyManipulatorFactory { private static Map manipulators = new HashMap<>(); public static CurrencyManipulator getManipulatorByCurrencyCode(String currencyCode){ CurrencyManipulator man = manipulators.get(currencyCode); if (man == null) { man = new CurrencyManipulator(currencyCode); manipulators.put(currencyCode, man); } return man; } private CurrencyManipulatorFactory(){} public static Collection getAllCurrencyManipulators(){ return manipulators.values(); } }