0

BankAcct 抽象メソッドを持つクラスを設計することになっていcomputeIntt()ます。Save と Time は BankAcct の一種です。問題は、Interest と New Balance の表示を実装できないことです。

これが私の現在のコードです:

public abstract class BankAcct 
{
    private int accountNumber;
    private String accountName;
    private double bal;

    public BankAcct(int act, String name, double m)
    {
        accountNumber = act;
        accountName = name;
        bal = m;
    }

    public double getBalance()
    {
        return bal;
    }

    public String getAccountName()
    {
        return accountName;
    }

    public int getAccountNumber()
    {
        return accountNumber;
    }

    public void deposit(double m)
    {
            bal+=m;
    }

    public void withdraw(double m)
    {
        bal-=m;
    }

    public abstract double computeInt();
}

public class Save extends BankAcct 
{
    public Save(int act, String name, double m)
    {
        super(act, name, m);
    }

    int act;
    String name="";
    double m;

    public double computeInt()
    {
        return m * 0.0025;
    }

}

public class Time extends BankAcct 
{
    public Time(int act, String name, double m)
    {
        super(act, name, m);
    }

    int act;
    String name="";
    double m;

    public double computeInt()
    {
        return m * 0.033;
    }

}

public class MainPr 
{
    public static void main(String[] args)
    {
        BankAcct sav = new Savings(1234, "ABC", 10000);
        BankAcct td = new TimeDeposit(9876, "DEF", 20000);

        // display the current balance
    
        System.out.println(sav.getAccountName() + " with account number " +
                    sav.getAccountNumber() + " has a balance of " +
                    sav.getBalance());
    
        System.out.println(td.getAccountName() + " with account number " +
            td.getAccountNumber() + " has a balance of " +
            td.getBalance());
    
        // deposit money
    
        sav.withdraw(5000.0);
    
        // display current value with its interest
    
        System.out.println("\n" + sav.getAccountName() + " with account number " +
            sav.getAccountNumber() + " earned an interest of " +
            sav.computeInt());
    
        System.out.println(sav.getAccountName() + " with account number " +
            sav.getAccountNumber() + " has a NEW BALANCE of " +
            sav.getBalance());
    
        td.deposit(2000.0);
    
        System.out.println("\n" + td.getAccountName() + " with account number " +
            td.getAccountNumber() + " earned an interest of " +
            td.computeInt());
    
        System.out.println(td.getAccountName() + " with account number " +
            td.getAccountNumber() + " has a NEW BALANCE of " +
            td.getBalance());
    }
}

次のデータに対して 2 つのオブジェクトをインスタンス化する MainPr: Save のアカウント番号は 1234 です。ABCのアカウント名; 10,000の残高。Time の口座番号は 9876 です。アカウント名DEF; 残高20万。

これが出力になるはずです: CORRECT ONE

口座番号 1234 の ABC の残高は 10000.0 です。

口座番号 9876 の DEF の残高は 20000.0 です

口座番号 1234 の ABC の利息 25.0

口座番号 1234 の ABC の新しい残高は 5025.0 です。

口座番号 9876 の DEF 経過利息 660.0

口座番号 9876 の DEF の新しい残高は 22660.0 です

しかし、私のプログラムは間違った出力を生成します:

口座番号 1234 の ABC の残高は 10000.0 です。

口座番号 9876 の DEF の残高は 20000.0 です

口座番号 1234 の ABC の利息 0.0

口座番号 1234 の ABC の新しい残高は 5000.0 です。

口座番号 9876 の DEF 経過利息 0.0

口座番号 9876 の DEF の新しい残高は 22000.0 です

この場合、Save の金利は 0.25% で、時間の金利は 3.3% です。残高は預金か引き出しかによって異なります。

親切に私を助けてください。ありがとう

4

1 に答える 1

1

サブクラスではインスタンス変数mは常に0(決して初期化されません) ですが、クラスでは に設定されているように見えbalますBankAcctcomputerInterestこれはあなたの方法に適していませんかTimeDeposit:

public double computeInterest() {
    return getBalance() * 0.033;
}

同様の修正を他のサブクラスで提供するか、少なくともm変数を初期化する必要があります。関連する注意事項として、サブクラスを定義する必要はありません。actまたはname、スーパークラスBankAcctで既に定義および保存されているためです。

また、computerInterestプログラムが期待しているように見える残高を変更していません。その場合、これはより適切かもしれません:

public double computeInterest() {
    double interest = getBalance() * 0.033;
    deposit(interest);
    return interest;
}
于 2013-01-20T05:27:57.707 に答える