SStudzinsky
32 уровень

Уровень 26, урок 15, большая задача 1. Задание 8.

Пост из группы Архив info.javarush.ru
2558 участников
Уже никакого терпения не хватает, будьте добры, укажите почему может не приниматься:
Задание 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(); } }