/**
* Mimics bank account program with 'deposit', 'withdraw', and 'transfer' functionalities
*/
public class BankAccount
{
private double balanceCad;
private final String accountNumber;
private final String lastName;
/**
* @param balanceCad balance of bank account in CAD (canadian dollars)
* @param accountNumber unique bank account number of person
* @param lastName last name of the bank account owner
*/
public BankAccount(final double balanceCad,
final String accountNumber,
final String lastName)
{
this.balanceCad = balanceCad;
this.accountNumber = accountNumber;
this.lastName = lastName;
}
/**
* Withdraws money from bank account in CAD (canadian dollars)
* @param amountCad amount of money in CAD (canadian dollars)
*/
public void withdrawMoneyCad(double amountCad)
{
this.balanceCad -= amountCad;
}
/**
* Deposits money into bank account in CAD (canadian dollars)
* @param amountCad amount of money in CAD (canadian dollars)
*/
public void depositMoneyCad(double amountCad)
{
this.balanceCad += amountCad;
}
/**
* Transfers amount of money in CAD into another bank account number
* @param amountCad amount of money in CAD
* @param recipientAccount account number of person receiving the transferred money in CAD (canadian dollars)
*/
public void transferMoneyCad(double amountCad,
final BankAccount recipientAccount)
{
recipientAccount.depositMoneyCad(amountCad);
this.withdrawMoneyCad(amountCad);
}
// Accessors
/**
*
* @return balance amount in CAD (canadian dollars)
*/
public double getBalanceCdn()
{
return balanceCad;
}
/**
* @return the unique bank account number of person
*/
public String getAccountNumber()
{
return accountNumber;
}
/**
* @return the unique last name of the bank account member
*/
public String getMemberLastName()
{
return lastName;
}
}
银行.java
/**
* Mimics a bank program that tells info about different bank accounts
*/
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Bank {
private final String bankName;
private final Map<String, BankAccount> bankAccounts;
public Bank(final String bankName)
{
this.bankName = bankName;
this.bankAccounts = new HashMap<>();
}
public void addAccount(BankAccount newBankAccount)
{
this.bankAccounts.put(newBankAccount.getAccountNumber(), newBankAccount);
}
public BankAccount getAccount(String accountNumber)
{
return this.bankAccounts.get(accountNumber);
}
public void removeAccount(String accountNumber)
{
this.bankAccounts.remove(accountNumber);
}
public int getNumberOfAccounts()
{
return this.bankAccounts.size();
}
public double getTotalAccountsBalance()
{
double totalCdn = 0.0;
for (BankAccount account : this.bankAccounts.values()) {
totalCdn += account.getBalanceCdn();
}
return totalCdn;
}
public void depositTo(double amountCdn, String accountNumber)
{
this.bankAccounts.get(accountNumber).depositMoneyCad(amountCdn);
}
public void printAllCustomerData()
{
final Iterator<String> it;
it = this.iterator();
while (it.hasNext())
{
final String theNextKey;
theNextKey = it.next();
System.out.printf("Customer %s has $%.2f in account #%s\n",
theNextKey, bankAccounts.get(theNextKey), accountNumber);
}
System.out.printf("Total bank balance in all accounts for %s is %.2f\n",
this.bankName, this.getTotalAccountsBalance());
}
}
public class Main {
public static void main(final String[] args)
{
final Bank bank;
final BankAccount account1;
final BankAccount account2;
final BankAccount account3;
final BankAccount account4;
bank = new Bank("Bank of Kanada");
account1 = new BankAccount(100.0,
"abc111",
"woods");
account2 = new BankAccount(200.0,
"def222",
"gates");
account3 = new BankAccount(300.0,
"ghi333",
"bezos");
account4 = new BankAccount(400.0,
"jkl444",
"zuckerberg");
bank.addAccount(account1);
bank.addAccount(account2);
bank.addAccount(account3);
bank.addAccount(account4);
bank.depositTo(22.22, "def222");
bank.getAccount("abc111").transferMoneyCad(5.00, bank.getAccount("ghi333"));
bank.printAllCustomerData();
}
}
我的 printAllCustomerData() 函数搞砸了;我希望我的 Hashmap 能够从 Main 动态获取键和值 ---> BankAccount 初始化
我期待的输出:
客户 Woods 的账户 #abc111 中有 95.00 美元
客户 Gates 的账户 #def222 中有 222.22 美元
客户 Bezos 的账户 #ghi333 中有 305.00 美元
客户扎克伯格的账户中有 400.00 美元#jkl444
加拿大银行所有账户的银行余额总额为 1022.22
将代码更改为
while (it.hasNext())
{
String theNextKey;
theNextKey = String.valueOf(it.next());
BankAccount account = bankAccounts.get(theNextKey);
System.out.printf("Customer %s has $%.2f in account #%s\n",
account.getMemberLastName(),account.getBalanceCdn() , this.bankName);
}
或者尝试这个代码,
ArrayList<String> sortedKeys = new ArrayList<String>(bankAccounts.keySet());
Collections.sort(sortedKeys);
for (String name: sortedKeys){
String customer = name;
BankAccount account = bankAccounts.get(customer);
System.out.printf("Customer %s has $%.2f in account #%s\n",
account.getMemberLastName(),account.getBalanceCdn() , this.bankName);
}
她会非常愿意跑