2011-03-29 81 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块将不会“看到”信用交易,并可能导致错误答案。