Java Arraylist、日期和线程

Java Arraylist、日期和线程,java,multithreading,date,arraylist,Java,Multithreading,Date,Arraylist,这是一个银行账户模拟程序,我希望使用交易频率将日期添加到交易中,以将日期添加到日历中,从而正确增加每个交易的日期。但是,当我调用以获取另一个类中的日期时,它会给出每个事务的总添加日期。比如说四周过去了,它会显示在这四周发生的每一笔交易,而不是每周。 底部的system.out.println将正确的日期打印到控制台,因此我假设这与我在arraylist中存储它的方式有关 如果有人能告诉我哪里出了问题,我会很高兴的 public void run() { calendar = Calen

这是一个银行账户模拟程序,我希望使用交易频率将日期添加到交易中,以将日期添加到日历中,从而正确增加每个交易的日期。但是,当我调用以获取另一个类中的日期时,它会给出每个事务的总添加日期。比如说四周过去了,它会显示在这四周发生的每一笔交易,而不是每周。 底部的system.out.println将正确的日期打印到控制台,因此我假设这与我在arraylist中存储它的方式有关

如果有人能告诉我哪里出了问题,我会很高兴的

 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");
      }
   }
}
public void run(){
calendar=calendar.getInstance();
而(持续时间>0){
持续时间--;
如果(持续时间%freq==0){
if(type==false){
本次提款(金额、账单名称);
交易结束=新交易(账单名称、金额、“结束”、日期);
翻译列表。添加(输出);
date.setTime(calendar.getTime().getTime());
日历。设置时间(日期);
calendar.add(calendar.DAY/u/u月,freq*7);
date.setTime(calendar.getTime().getTime());
}否则{
此项。存款(金额、账单名称);
交易入=新交易(账单名称、金额、“入”、日期);
翻译列表。添加(in);
}
}
试一试{
睡眠(1000);
系统输出打印项次(日期);
}捕获(中断异常例外){
Logger.getLogger(
DepositThread.class.getName()).log(Level.SEVERE,null,ex);
}
}            
}
公共无效sortType(字符串sortPara){
trans.setText(“”);

对于(int i=0;i您正在向所有事务添加相同的可禁用日期对象,然后开始使用以下命令对其进行更改:
date.setTime(calendar.getTime().getTime());


使日期对象不可变,并为每个事务创建一个新对象。

您使用的是相同的日期

改变

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


请尽量说得更清楚些,不过我还是想弄清楚你说的是什么对不起,基本上它应该在一笔交易中添加日期,然后将日期增加1周,然后再添加到另一笔交易中。这应该为每笔交易提供不同的日期,但它只是显示了两笔交易的最终日期。你发帖时我正在写答案艾德:谢谢你的帮助,我让它工作了:)非常感谢!是的,它使它工作了:)简单的错误现在我知道答案了。
 Transaction out = new Transaction(billName, amount, "Out", new Date(date));