import java.text.DecimalFormat;
        import java.util.ArrayList;

        public class AccountOwner {
            private Account account;
            private String firstname;
            private String lastname;
            private String address;
            private double currentBalance;
            private ArrayList<Integer> withdrawAmount = new ArrayList<Integer>(5);
            private ArrayList<Double> deposits = new ArrayList<Double>();
            private ArrayList<Double> purchases = new ArrayList<Double>(5);
            private DecimalFormat formatter = new DecimalFormat("##0.00");

            public AccountOwner(String firstname, String lastname, String address) {
                this.firstname = firstname;
                this.lastname = lastname;
                this.address = address;
            }

            public String getFirstName() {
                return firstname;
            }

            public String getLatName() {
                return lastname;
            }

            public String getAddress() {
                return address;
            }


            public String checkBalance() {

                for (Double deposit : deposits) {
                    this.currentBalance += deposit;
                }

                return formatter.format(currentBalance);
            }

            public void makeDeposit(double amount) {
                deposits.add(amount);
            }

            public void viewAllDeposits() {

                double allDeposits = 0.0;
                System.out.println("All deposits till today:");
                for (int i = 0; i < deposits.size(); i++) {
                    allDeposits = deposits.get(i);

                    System.out.print("\t"+"$"+allDeposits);
                }
                System.out.println();
            }

            public void withdrawMoney(int amount) {
                withdrawAmount.add(amount);
                currentBalance -= amount;
            }

            public String getActualBalance() {
                return formatter.format(currentBalance);
            }

            public void withdrawAmounts(){
                System.out.println("All Withdrawls till today");
                for(int i = 0; i < withdrawAmount.size(); i++){
                    System.out.print("\t"+"$"+withdrawAmount.get(i));
                }
                System.out.println();
            }

            public void makePurchase(double itemPrice){
                purchases.add(itemPrice);
                this.currentBalance -= itemPrice;
            }

            public void viewAllmadePurchases() {

                double purchase = 0.0;
                System.out.println("All purchases made till today:");
                for (int i = 0; i < purchases.size(); i++) {
                    purchase = purchases.get(i);

                    System.out.print("\t"+"$"+purchase);
                }

            }

            public void viewMyPersonalInformation(){
                System.out.println("Firstname:" + this.firstname);
                System.out.println("LastName:" +this.lastname);
                System.out.println("Address:" +this.address);
                System.out.println("Balance:" +this.checkBalance());
                viewAllDeposits();
                withdrawAmounts();
                viewAllmadePurchases();

            }



        public class Account {
            private AccountOwner customer;
            private int accountNumber;


            public Account(){
                customer = null;
                accountNumber = 0000000;


            }

            public Account(int accountNumber, AccountOwner owner){
                       this.accountNumber = accountNumber;
                       customer = owner;


            }

            public int accountNumberIs(){
                return accountNumber;
            }

        public class BankManager {
            private Account account;
            private AccountOwner accountOwner;
            private int accountNumber;


                public void createNewAccount(int accountNumber, AccountOwner owner){
                account = new Account(accountNumber, owner);
                this.accountNumber = accountNumber;
                this.accountOwner = owner;
                }



            public int getaccountNumber(){

                return accountNumber;
            }


            public void setAccountNumber(int newaccountnumber){
                accountNumber = newaccountnumber;
            }

            public void customerInformation(){
                accountOwner.viewMyPersonalInformation();
            }
public class MainProgram {

    /**
     * @param args
     */
    public static void main(String[] args) {
        BankManager manager = new BankManager();
        AccountOwner owner = new AccountOwner("Tom", "Smith", "208 W 119th St");
        manager.createNewAccount(389745, owner);
        Account acc = new Account();





        owner.makeDeposit(550);
        owner.makeDeposit(700);
        owner.makeDeposit(122.93);
        owner.makeDeposit(195.93);
        owner.withdrawMoney(200);
        owner.makePurchase(200);
        owner.makeDeposit(100);
        owner.makePurchase(1220);
        owner.withdrawMoney(30);



        owner.viewMyPersonalInformation();
        System.out.println();
        System.out.println();
        System.out.println();
        System.out.println(acc.accountNumberIs());


我遇到的问题是我试图从帐户所有者访问帐号而又不涉及对bankmanager类的引用..我该如何使用它。我有
一直尝试使用帐户类本身,因为我创建了一个构造函数并分配了这些
对帐户类中的字段进行参数设置,但似乎不起作用

最佳答案

此代码包含一个错误:

public Account(int accountNumber, AccountOwner owner){
    AccountOwner cstomer = owner;
    int acctNumber = accountNumber;
    accountNumber = acctNumber;
    //System.out.println(accountNumber);
}


您传递给构造函数的accountNumber参数优先于类的accountNumber字段。您的AccountaccountNumber字段实际上从未设置。

这等效于:

public Account(int accountNumber, AccountOwner owner){
    AccountOwner cstomer = owner;
    accountNumber = accountNumber;
}




为确保您正在访问该字段,请使用this关键字,如下所示:this.accountNumber

public Account(int accountNumber, AccountOwner owner){
    AccountOwner cstomer = owner;
    this.accountNumber = accountNumber;
    //System.out.println(accountNumber);
}


还有另一个错误,未分配Account.customer

public Account(int accountNumber, AccountOwner owner){
    customer = owner;
    this.accountNumber = accountNumber;
}


我建议您学习使用调试器或更好的编写单元测试(第一个)。

10-07 16:19