-1

这是一个银行账户模拟程序,我希望使用交易频率将日期添加到交易中,以将日期添加到日历中,从而为每笔交易正确增加日期。但是,当我打电话获取另一个班级的日期时,它会给我每笔交易的总添加日期。所以说四个星期过去了,它会显示每笔交易发生在这四个星期,而不是每周。底部的 system.out.println 将正确的日期打印到控制台,所以我认为它与我将它存储在数组列表中的方式有​​关。

如果有人能告诉我哪里出错了,我会很高兴。

 public void run() {
    calendar = Calendar.getInstance();
    while (duration > 0) {
        duration--;
        if (duration % freq == 0) {
            if (type == false) {
                this.withdraw(amount, billName);
                Transaction out = new Transaction(billName, amount, "Out",date);
                transList.add(out);
                date.setTime( calendar.getTime().getTime());
                calendar.setTime(date);
                calendar.add(Calendar.DAY_OF_MONTH, freq*7);
                date.setTime( calendar.getTime().getTime());
            } else {
               this.deposit(amount, billName);
               Transaction in = new Transaction(billName, amount, "In",date);
               transList.add(in);
            }
        }
        try {
            Thread.sleep(1000);
            System.out.println(date);
        } catch (InterruptedException ex) {
            Logger.getLogger(
               DepositThread.class.getName()).log(Level.SEVERE, null, ex);
        }
    }            
}

public void sortType( String sortPara ) {
   trans.setText("");
   for(int i=0; i<transList.size();i++){
      String textArea = trans.getText();
      transList.get(i).getDate();
      if(transList.get(i).type.equals(sortPara)) {
         System.out.println(transList.get(i).getName());
         trans.setText(textArea+transList.get(i).getName()+
            "       "+String.valueOf(transList.get(i).getAmount())+"     "+ 
            transList.get(i).getDate()+"\n");
      }
   }
}
4

2 回答 2

0

您正在将相同的可变日期对象添加到所有事务中,然后开始更改它: date.setTime( calendar.getTime().getTime());

使您的日期对象不可变,并为每笔交易创建一个新对象。

于 2013-04-13T18:49:58.463 回答
0

您正在使用相同的日期。

改变

 Transaction out = new Transaction(billName, amount, "Out",date);

 Transaction out = new Transaction(billName, amount, "Out", new Date(date));
于 2013-04-13T18:54:02.270 回答