2012-09-06 2 views
1

내 학교에서 Java를 깊이 배울 수있게되었는데, 마침내 어디가 잘못되었는지 잘 모르는 벽을 쳤습니다. CheckingAccount와 SavingsAccount가 파생 된 상위 클래스 인 BankAccount와 AccountDriver 중 하나 인 4 개의 클래스를 나열합니다. 이제 내 문제는 SavingsAccount에 있습니다. 여기에 코드 ...Java 복사 생성자 은행 계좌 문제

AccountDriver이다

//Demonstrates the BankAccount and derived classes 

import java.text.*;   // to use Decimal Format 

public class AccountDriver 
{ 
public static void main(String[] args) 
{ 
    double put_in = 500; 
    double take_out = 1000; 

    DecimalFormat myFormat; 
    String money; 
    String money_in; 
    String money_out; 
    boolean completed; 

    // to get 2 decimals every time 
    myFormat = new DecimalFormat("#.00"); 

    //to test the Checking Account class 
    CheckingAccount myCheckingAccount = 
      new CheckingAccount ("Benjamin Franklin", 1000); 
    System.out.println ("Account Number " 
     + myCheckingAccount.getAccountNumber() + 
     " belonging to " + myCheckingAccount.getOwner()); 
    money = myFormat.format(myCheckingAccount.getBalance()); 
    System.out.println ("Initial balance = $" + money); 
    myCheckingAccount.deposit (put_in); 
    money_in = myFormat.format(put_in); 
    money = myFormat.format(myCheckingAccount.getBalance()); 
    System.out.println ("After deposit of $" + money_in 
     + ", balance = $" + money); 
    completed = myCheckingAccount.withdraw(take_out); 
    money_out = myFormat.format(take_out); 
    money = myFormat.format(myCheckingAccount.getBalance()); 
    if (completed) 
    { 
     System.out.println ("After withdrawal of $" + money_out 
       + ", balance = $" + money); 
    } 
    else 
    { 
     System.out.println ("Insuffient funds to withdraw $" 
       + money_out + ", balance = $" + money); 
    } 
    System.out.println(); 

    //to test the savings account class 
    SavingsAccount yourAccount = 
      new SavingsAccount ("William Shakespeare", 400); 
    System.out.println ("Account Number " 
      + yourAccount.getAccountNumber() + 
      " belonging to " + yourAccount.getOwner()); 
    money = myFormat.format(yourAccount.getBalance()); 
    System.out.println ("Initial balance = $" + money); 
    yourAccount.deposit (put_in); 
    money_in = myFormat.format(put_in); 
    money = myFormat.format(yourAccount.getBalance()); 
    System.out.println ("After deposit of $" + money_in 
      + ", balance = $" + money); 
    completed = yourAccount.withdraw(take_out); 
    money_out = myFormat.format(take_out); 
    money = myFormat.format(yourAccount.getBalance()); 
    if (completed) 
    { 
     System.out.println ("After withdrawal of $" + money_out 
      + ", balance = $" + money); 
    } 
    else 
    { 
     System.out.println ("Insuffient funds to withdraw $" 
      + money_out + ", balance = $" + money); 
    } 
    yourAccount.postInterest(); 
    money = myFormat.format(yourAccount.getBalance()); 
    System.out.println ("After monthly interest has been posted," 
      + "balance = $" + money); 
    System.out.println(); 


    // to test the copy constructor of the savings account class 
    SavingsAccount secondAccount = 
      new SavingsAccount (yourAccount,5); 
    System.out.println ("Account Number " 
      + secondAccount.getAccountNumber()+ 
      " belonging to " + secondAccount.getOwner()); 
    money = myFormat.format(secondAccount.getBalance()); 
    System.out.println ("Initial balance = $" + money); 
    secondAccount.deposit (put_in); 
    money_in = myFormat.format(put_in); 
    money = myFormat.format(secondAccount.getBalance()); 
    System.out.println ("After deposit of $" + money_in 
      + ", balance = $" + money); 
    secondAccount.withdraw(take_out); 
    money_out = myFormat.format(take_out); 
    money = myFormat.format(secondAccount.getBalance()); 
    if (completed) 
    { 
     System.out.println ("After withdrawal of $" + money_out 
       + ", balance = $" + money); 
    } 
    else 
    { 
     System.out.println ("Insuffient funds to withdraw $" 
       + money_out + ", balance = $" + money); 
    } 
    System.out.println(); 

    //to test to make sure new accounts are numbered correctly 
    CheckingAccount yourCheckingAccount = 
      new CheckingAccount ("Issac Newton", 5000); 
    System.out.println ("Account Number " 
      + yourCheckingAccount.getAccountNumber() 
      + " belonging to " 
      + yourCheckingAccount.getOwner()); 

} 
} 

는 BankAccount (부모 클래스) 마지막으로

//Defines any type of bank account 

public abstract class BankAccount 
{ 
// class variable so that each account has a unique number 
protected static int numberOfAccounts = 100001; 

// current balance in the account 
private double balance; 
// name on the account 
private String owner; 
// number bank uses to identify account 
private String accountNumber; 

//default constructor 
public BankAccount() 
{ 
    balance = 0; 
    accountNumber = numberOfAccounts + ""; 
    numberOfAccounts++; 
} 

//standard constructor 
public BankAccount(String name, double amount) 
{ 
    owner = name; 
    balance = amount; 
    accountNumber = numberOfAccounts + ""; 
    numberOfAccounts++; 
} 

//copy constructor 
public BankAccount(BankAccount oldAccount, double amount) 
{ 
    owner = oldAccount.owner; 
    balance = amount; 
    accountNumber = oldAccount.accountNumber; 
} 

//allows you to add money to the account 
public void deposit(double amount) 
{ 
    balance = balance + amount; 
} 

//allows you to remove money from the account if 
//enough money is available 
//returns true if the transaction was completed 
//returns false if the there was not enough money 
public boolean withdraw(double amount) 
{ 
    boolean completed = true; 

    if (amount <= balance) 
    { 
     balance = balance - amount; 
    } 
    else 
    { 
     completed = false; 
    } 
    return completed; 
} 

//accessor method to balance 
public double getBalance() 
{ 
    return balance; 
} 

//accessor method to owner 
public String getOwner() 
{ 
    return owner; 
} 

//accessor method to account number 
public String getAccountNumber() 
{ 
    return accountNumber; 
} 

//mutator method to change the balance 
public void setBalance(double newBalance) 
{ 
    balance = newBalance; 
} 

//mutator method to change the account number 
public void setAccountNumber(String newAccountNumber) 
{ 
    accountNumber = newAccountNumber; 
} 
} 

CheckingAccount

public class CheckingAccount extends BankAccount { 

private double fee = .15; 

private String accountNumber = getAccountNumber() + "-10"; 

public CheckingAccount(String name, double amount) 
{ 

    super(name, amount); 

    setAccountNumber(accountNumber); 


} 

public boolean withdraw(double amount) 
{ 
    double finalAmount = amount + fee; 

    super.withdraw(finalAmount); 

    boolean completed = true; 

    return completed; 

} 

} 

그리고,에서 SavingsAccount

public class SavingsAccount extends BankAccount{ 

double rate = .025; 

static int savingsNumber = 0; 

private String accountNumber = super.getAccountNumber(); 


//Default constructor 
public SavingsAccount(String name, double amount){ 

    super(name, amount); 

    accountNumber = accountNumber + "-" + Integer.toString(savingsNumber); 

} 


//Copy constructor 
public SavingsAccount(SavingsAccount oldAccount, double amount) 
{   

    savingsNumber++; 

    accountNumber = oldAccount.accountNumber + Integer.toString(savingsNumber); 
} 


public void postInterest(){ 
    double interestAmount = getBalance() * .025/12; 

    double finalAmount = getBalance() + interestAmount; 

    setBalance(finalAmount); 
} 


public String getAccountNumber() 
{ 
    return accountNumber; 
} 

} 그래서 여기

는 ... 그래서 내 문제는 별 나열되어 있습니다

Account Number 100001-10 belonging to Benjamin Franklin 
Initial balance = $1000.00 
After deposit of $500.00, balance = $1500.00 
After withdrawal of $1000.00, balance = $499.85 

Account Number 100002-0 belonging to William Shakespeare 
Initial balance = $400.00 
After deposit of $500.00, balance = $900.00 
Insuffient funds to withdraw $1000.00, balance = $900.00 
After monthly interest has been posted,balance = $901.88 

Account Number 100002-01 belonging to null **Should be 10002-1 and William Shakespeare** 
Initial balance = $.00      **Should be $5.00** 
After deposit of $500.00, balance = $500.00 **Should be changed in accordance with an initial balance of $5.00 
Insuffient funds to withdraw $1000.00, balance = $500.00 **" "** 

Account Number 100004-10 belonging to Issac Newton **Should be # 10003-10 

AccountDriver이 실행되는 출력과 나도 점점 동일하거나 더 다른 방법을 시도하고 2 시간 보냈다 결과. 잘만되면 누군가 내가 잘못 가고있는 곳을 지적 할 수 있기를 바랍니다. 감사합니다 무리들.

답변

0

소유자는 BankAccount 클래스의 멤버입니다. 또한 사본 소유자에 소유자 구성원을 설정해야합니다. 이것은 다른 회원들에게도 해당됩니다. 당신의 복사 생성자에서

//Copy constructor 
public SavingsAccount(SavingsAccount oldAccount, double amount) 
{   

    savingsNumber++; 

    accountNumber = oldAccount.accountNumber + Integer.toString(savingsNumber); 
    owner = oldAccount.getOwner(); 
    balance = oldAccount.getBalance(); 
    //... 

} 
+0

"를 BankAccount.owner/밸런스가 아니다 visible " – Devigili

+1

기본 클래스의 멤버에 대해 공용 설정을 사용하거나 멤버를 보호해야합니다. – steffan

1

당신이 좋아하는 통과 SavingsAccount 인스턴스에서 모든 멤버를 초기화해야한다 : 즉 나에게 소유자와 균형을 모두 말에서 오류를 제공하려고

//Copy constructor 

public SavingsAccount(SavingsAccount oldAccount, double amount) 
{   
    super(oldAccount,amount); // <--- SUPER COPY CONSTRUCTOR CALLED 
    savingsNumber++; 
    accountNumber = oldAccount.accountNumber + Integer.toString(savingsNumber); 
}