2013-10-26 97 views
0

我有一個銀行帳戶,我執行任務如:進行存款/取款。我需要創建存儲我最後一次動作的歷史記錄。 (假設全銀行只有一個賬戶)。如何製作歷史任務算法?

據我所知,至少會有兩類:BankAccount和Actions;

class BankAccount { 
    private Action performTask;  
    public class Action() { 
     private int actIndex; 
     private String[] act = new String[10]; 

     Action() { 
     actIndex = -1;  
     } 

     public void add(String title) { 
     ++actIndex; 
     act[actIndex] = title; 
     } 
    } 

    public void deposit(){ 
    performTask.add("Deposit"); 
    }  
} 

可能有錯誤,但仍然沒有得到預期的結果。我怎樣才能達到我想要的結果?有任何想法嗎?

+1

1)不要嵌套這些類,因爲你現在正在做。 2)如果可能的話,我會讓Action成爲一個界面。 –

+0

我現在正在使用嵌套類,練習就是在這種情況下使用它。編輯:也許我需要通過創建一個Action的對象來實現這個目標?並在我的銀行帳戶類中初始化Action lastAct。 (?) – Ernusc

+0

那麼,你期望的結果是什麼,實際結果是什麼? –

回答

0

ACtion類是抽象類。它有兩個功能:

  • doAction(int k)其撤銷或根據實施
  • printAction()其打印的執行操作存款

DepositActionWithdrawAction兩個實施Action類的。

actionListQueue它持有發生的最後10個交易。

amount是經常賬戶持有的總金額,這是兩個類別DepositActionWithdrawAction運行的數量。

希望這會幫助你。

public class BankAccount{ 
    private int amount; 
    private Queue<Action> actionList=new LinkedList<Action>(); 

    public void withDraw(int k){ 
     Action a = new withdrawAction(); 
     a.doAction(k); 
     if(actionList.size()<10){ 
      actionList.offer(a); 
     } 
     else{ 
      actionList.poll(); 
      actionList.offer(a); 
     } 
    } 

    public void deposit(int k){ 
     Action a = new DepositAction(); 
     a.doAction(k); 
     if(actionList.size()<10){ 
      actionList.offer(a); 
     } 
     else{ 
      actionList.poll(); 
      actionList.offer(a); 
     } 
    } 

    abstract class Action{ 
     String actionDesc=null; 
     abstract void doAction(int k); 
     abstract void printAction(); 
    } 

    class DepositAction extends Action{ 
     @Override 
     void doAction(int k) { 
      amount=amount+k; 
      actionDesc="Deposit: "+k; 
     } 
     @Override 
     void printAction() { 
      System.out.println(actionDesc); 
     } 
    } 

    class withdrawAction extends Action{ 
     @Override 
     void doAction(int k) { 
      if(amount-k<0){ 
       throw new IllegalArgumentException(); 
      } 
      amount=amount-k; 
      actionDesc="Withdraw: "+k; 
     } 
     @Override 
     void printAction() { 
      System.out.println(actionDesc); 
     } 
    } 
} 
+0

是的,現在很清楚:)謝謝! – Ernusc

0

也只是一個想法

可以保持尺寸10

,你執行退出,存款操作,更改隊列以及以反映最新訴訟的地點的queue