2013-01-20 196 views
0

我應該用抽象方法computeIntt()設計一個BankAcct類。保存和時間是BankAcct的種類。問題是我無法實現的利益和新的平衡的顯示抽象類/方法實現

這裏是我當前的代碼:

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

MainPr將爲以下數據實例化兩個對象: 保存的賬號爲1234; ABC的賬戶名稱; 10,000的餘額。 已有賬號9876;帳戶名稱DEF; 2萬的餘額。

這應該是輸出:正確

ABC與帳號1234具有10000.0

DEF與帳號9876的天平具有20000.0

ABC與帳號餘額1234賺得利息25.0

帳號1234的ABC有新餘額5025.0

DEF與帳號9876賺取利息660.0

DEF與賬戶號碼9876擁有22660.0

一個新的平衡,但我的程序產生不正確的輸出:

ABC與賬戶號碼1234餘額爲10000.0

賬號9876的DEF有餘額20000.0

ABC與帳號1234賺取利息0.0

ABC與帳號1234已經5000.0

DEF與賬戶號碼9876的新平衡賺取利息0.0

DEF與賬戶號碼9876有一個新的平衡的22000.0

在這種情況下,在保存利率爲0.25%,而時間利息爲3.3%餘額取決於它是存款還是取款。

請幫助我。感謝

回答

1

你的實例變量m總是0(從未初始化)在你的子類,但他們看起來像他們在BankAcct類設置爲bal。這是不是適合你的computerInterest方法TimeDeposit

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

類似的修補程序應該在其他子類中提供或至少初始化m變量。在相關說明中,您的子類不需要定義actname,因爲您的超類BankAcct已經定義並存儲了它。

此外,您的computerInterest不會修改您的程序似乎期望的餘額。如果是這樣的話,這可能更合適:

public double computeInterest() { 
    double interest = getBalance() * 0.033; 
    deposit(interest); 
    return interest; 
} 
+0

因此,我將刪除「公共TimeDeposit(int act,String name,double m)」和聲明部分? –

+0

不,這是構造函數,仍然需要。這就是將變量傳遞給超類的原因。這三行是不必要的:'int act; String name =「」;雙米;' –

+0

請幫我用我的公式。它有什麼問題,它仍然不會產生良好的輸出 –