从 Main 中的实例化类动态访问 Hashmap 的键和值

问题描述 投票:0回答:1

如何从 Main 中的实例化类访问/填充 Hashmap 的键和值对

银行账户.java

/**
 * 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());
    }
}

Main.java

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

java hashmap set entryset
1个回答
0
投票

将代码更改为

        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);
    }

她会非常愿意跑

© www.soinside.com 2019 - 2024. All rights reserved.