无法访问帐号

时间:2013-03-15 14:36:17

标签: java

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

我遇到的问题是我正在尝试从帐户所有者访问帐号而不涉及对银行管理员类的引用..我怎样才能让它工作。我有 一直在尝试使用帐户类本身因为我创建了一个构造函数并分配它们 到帐户类字段的参数但看起来不起作用

3 个答案:

答案 0 :(得分:1)

此代码包含错误:

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

您传递给构造函数的accountNumber参数优先于您的类的accountNumber字段。 <{1}}的{​​{1}}字段实际上从未设置过。

这相当于:

Account

要确保您访问该字段,请使用accountNumber关键字,如: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);
}

我建议您学习使用调试器或更好地编写单元测试(首先)。

答案 1 :(得分:0)

class AccountOwner {
//...
    private Account account;
//...
    public Integer getAccountNumber() {
        return this.account != null ? this.account.accountNumberIs() : null;
    }
}

答案 2 :(得分:0)

您已将accountNumber类型设置为 int 并将其设置为0000000(对于int类型仅等于0)因此当您获得0时调用getAccountNumber()方法。

而是将accountNumber类型更改为字符串,并将其初始化为&00; 0000000&#39;。您将看到正在打印0000000。