#java #list #enumeration
#java #Список #перечисление
Вопрос:
У меня есть следующий класс перечисления: public enum Banknote {
FIVE_JOD(new BigDecimal("5.0")),
TEN_JOD(new BigDecimal("10.0")),
TWENTY_JOD(new BigDecimal("20.0")),
FIFTY_JOD(new BigDecimal("50.0"));
private final BigDecimal value;
//constructor
Banknote(BigDecimal value) {
this.value = value;
}
public BigDecimal getValue() {
return value;
}
}
как я могу вернуть список банкнот в этом методе класса банкомата:
открытый класс ATM_Implementation реализует ATM {
@Override
public List<Banknote> withdraw(String accountNumber, BigDecimal amount) {
int accountNumberIntegerInput = Integer.parseInt(accountNumber);
System.out.println("Enter amount ");
BankingSystemImplementation object = new BankingSystemImplementation();
BigDecimal balanceInSystem = object.getAccountBalance(accountNumber);
int equals = balanceInSystem.compareTo(amount); //compare between two bigDecimal objects
if ((equals == 0 || equals == 1)) {
object.debitAccount(accountNumber, amount); //subtact two bigdacimal objects
}
else if (equals==-1){
throw new InsufficientFundsException();
}
return null;
}
Ответ №1:
Вы должны разделить сумму снятия на банкноты (если я понял ваш вопрос). Его наивная реализация.
Пример: Сумма = 100; Результат: [FIFTY_JOD, FIFTY_JOD]
Пример: Сумма = 87; Результат: [FIFTY_JOD, TWENTY_JOD, TEN_JOD, FIVE_JOD, ONE_JOD, ONE_JOD]
Реализация (метакод):
List<Banknotes> banknotes = new List<Banknotes>;
BigDecimal remains = amount;
int count50;
int count20;
int count10;
int count5;
int count1;
// Evaluate each nominal count
if(remains >= 50)
{
count50 = (int)(remains/50);
remains = remains - (count50 * 50);
}
if(remains >= 20)
{
count20 = (int)(remains/20);
remains = remains - (count20 * 50);
}
if(remains >= 10)
{
count10 = (int)(remains/10);
remains = remains - (count10 * 10);
}
if(remains >= 5)
{
count5 = (int)(remains/5);
remains = remains - (count5 * 5);
}
if(remains >= 1)
{
count5 = (int)(remains/1);
remains = remains - (count1 * 1);
}
// Fill banknotes list
for(int i = 0; i < count50; i )
banknotes.Add(FIFTY_JOD)
for(int i = 0; i < count20; i )
banknotes.Add(TWENTY_JOD)
for(int i = 0; i < count10; i )
banknotes.Add(TEN_JOD)
for(int i = 0; i < count5; i )
banknotes.Add(FIVE_JOD)
for(int i = 0; i < count1; i )
banknotes.Add(ONE_JOD)
return banknotes;