1

学校で Java を深く学び始めたのですが、ついにどこが間違っているのかわからない壁にぶつかりました。4 つのクラスをリストします。1 つは AccountDriver またはメイン メソッド、BankAccount、CheckingAccount と SavingsAccount の派生元の親クラスです。今、私の問題は SavingsAccount にあります。これがコードです...

アカウントドライバー

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

当座預金口座

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;

}

}

そして最後に、貯蓄口座

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

}

したがって、AccountDriver が実行されたときの出力は次のとおりです...

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

したがって、私の問題は星付きでリストされており、さまざまな方法を試して2時間費やしましたが、同じ結果または悪い結果が得られました. 誰かが私が間違っているところを指摘してくれることを願っています。たくさんの人に感謝します。

4

2 に答える 2

1

SavingsAccountコピー コンストラクターでは、次のように、渡されたインスタンスからすべてのメンバーを初期化する必要があります。

//Copy constructor

public SavingsAccount(SavingsAccount oldAccount, double amount)
{           
    super(oldAccount,amount);  //  <--- SUPER COPY CONSTRUCTOR CALLED
    savingsNumber++;
    accountNumber = oldAccount.accountNumber + Integer.toString(savingsNumber);
}
于 2012-09-15T18:37:46.840 に答える
0

所有者は BankAccount クラスのメンバーです。また、copy ctor に所有者メンバーを設定する必要があります。これは他のメンバーも同様です。

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

    savingsNumber++;

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

}
于 2012-09-06T05:15:07.277 に答える