Уже никакого терпения не хватает, будьте добры, укажите почему может не приниматься:
Задание 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();
}
}
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ