возвращает список в java

#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;