2011-03-29 105 views
1

這就是我得到的。不同賬戶類型(儲蓄,當前和固定)的客戶類別的對象的鏈接列表。每個Customer對象都有一個交易LinkedList(另一個類)作爲屬性。可以進行兩種類型的交易,即借記(提款)或貸記(存款)。鑑於:儲蓄賬戶可能會變爲負數,而其他兩個賬戶無​​法儲蓄。不允許從固定賬戶進行借記交易(不提款)。利息計算

如果賬戶餘額爲正,那麼利率爲0.0003,而如果賬戶餘額爲負(只可用於儲蓄賬戶),則利率爲-0.002。利息計算如下:

爲了正面利益,它基於 在過去24小時(即從午夜到午夜)的賬戶中的金額。例如,如果 您在小時0有100美元,但您在第1小時已提取50美元,並在第2小時存回$ 50 ,那麼您將被視爲只有50美元在當天的末尾 停留在您的帳戶中24小時小時24)。在第24小時,您帳戶中的金額將爲100美元加上根據50美元計算的每日 利息。

對於負利率,它基於您當天銀行所欠的最大負值貨幣的總和。如果您向銀行借錢,即使您在1分鐘後退還貨款,他們也會向您收取利息 。例如,如果您的儲蓄帳戶在0小時有 $ 100,但您在小時22提款200美元,然後在 小時存款1000美元。到今天午夜您將不會獲得任何正利益,但將收取 負數今天向銀行借100美元的利息。

對於最初爲$ 566.00的儲蓄賬戶和該賬戶的交易如下: 借方:50(日期:11-09-2008),借方:500(15-09-2008);信用:200(22-09-2008);借方:500(23-09-2008)。

樣品計算被給定爲:

(((566 * 1.0003^10-50)* 1.0003^4-500)* 1.0003^8 + 200-500)* 1.002^8〜= 286.17。

我得到了一些1377.68的數字,這顯然不匹配。

這是我的儲蓄賬戶,但我很確定這是錯誤的。我的問題是如何計算每個客戶循環交易時的興趣。我的計算是錯誤的。所以我將不勝感激,如果有人可以幫我解決了邏輯

public void update(double rate){ // Savings account interest calc 
     Transactions ctr = new Transactions(); 
     Node<Transactions> counter = new Node<Transactions>(ctr); 
     counter=this.trans.head; 
     int i=0; 
     double negRate = -0.002; 
     double posRate = 0.0003; 
     double updatedBal = this.get_balance(); 
     while(counter!=null){ 
      if (updatedBal >0){ 
       if(trans.getItem(i).AccType.equals("Crebit")){ 
        double exponent = Double.parseDouble(trans.getItem(i).get_Date().substring(0, 2)); 
        updatedBal= (updatedBal*(Math.pow((1+ posRate),exponent-1))+trans.getItem(i).get_Amount()); 
      } 
       else if(trans.getItem(i).AccType.equals("Debit")){ 
        double exponent = Double.parseDouble(trans.getItem(i).get_Date().substring(0, 2)); 
        updatedBal= (updatedBal*(Math.pow((1+ posRate),exponent-1))-trans.getItem(i).get_Amount()); 
       } 
      } 
      else 
      { 
        if(trans.getItem(i).AccType.equals("Crebit")){ 
        double exponent = Double.parseDouble(trans.getItem(i).get_Date().substring(0, 2)); 
        updatedBal= (updatedBal*(Math.pow((1+ negRate),exponent-1))+trans.getItem(i).get_Amount()); 
      } 
       else if(trans.getItem(i).AccType.equals("Debit")){ 
        double exponent = Double.parseDouble(trans.getItem(i).get_Date().substring(0, 2)); 
        updatedBal= (updatedBal*(Math.pow((1+ negRate),exponent-1))-trans.getItem(i).get_Amount()); 
       } 
      } 

       counter=counter.next; 
     } 

      this.set_balance(updatedBal); 
    } 
+5

你的問題是什麼?我預測如果你不糾正這個問題,它會很快關閉。請記住,我們不是來做你的家庭作業/工作。告訴我們你已經做了一些努力,並明確指出了難以克服的編程挑戰。 – I82Much 2011-03-29 19:20:01

+1

你的問題是什麼? – 2011-03-29 19:20:52

+0

啊對不起,我錯誤地發帖子的問題。 – dawnoflife 2011-03-29 19:22:22

回答

0

你的代碼中有兩個地方trans.getItem(i).AccType.equals("Crebit")。據推測,這應該是Cre d它。如果交易項目的AccType字段的值使用正確的拼寫,那麼在計算利息時,您的if塊將不會「看到」信用交易,並可能導致錯誤答案。