2013-03-15 60 views
0
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类的引用..我怎么才能得到它的工作。我已经 一直试图使用该帐户类本身的原因,我创建一个构造函数和分配这些 PARAMATERS在账户类的领域,但似乎没有工作无法访问帐户号码

回答

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

该代码包含了一个错误:

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

还有一个BUG,该Account.customer未分配:

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

我建议你要学会用调试器或犹未写单元测试(第一次)。

+0

如果你更清楚地解释OP的代码出了什么问题,为什么你的代码会修复它,我会+1。 – 2013-03-15 14:47:49

+0

感谢@SamIam。 – gontard 2013-03-15 14:55:53

+0

好吧,这是怎么回事..当我尝试从帐户类获得帐号我得到0而不是实际的帐号.. – user1535963 2013-03-15 14:57:27

0

你已经设置你的了accountNumber类型为INT并将其设置为0000000(等于只是0 int类型),因此你得到0,当你调用getAccountNumber()方法。

相反,改变了accountNumber类型字符串并初始化为 '0000000'。您将看到正在打印0000000。

+0

您提出的解决方案似乎不起作用 – user1535963 2013-03-15 14:58:00