Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向向量添加定期日期_Java_Date_Loops_Vector_Deprecated - Fatal编程技术网

Java 向向量添加定期日期

Java 向向量添加定期日期,java,date,loops,vector,deprecated,Java,Date,Loops,Vector,Deprecated,我的日历程序仍然使用Java上不推荐使用的setYear(),不知怎的,它显示的是同一年,如下所示: 2022年12月21日星期三00:00:00 CST //loop in another method for (int i = realYear-1900; i <= realYear-1900+10; i++){ date.setYear(i); vectorEvents.add(new Event(date, title)); } textArea.setText(d

我的日历程序仍然使用Java上不推荐使用的setYear(),不知怎的,它显示的是同一年,如下所示:

2022年12月21日星期三00:00:00 CST

//loop in another method
for (int i = realYear-1900; i <= realYear-1900+10; i++){
    date.setYear(i);
    vectorEvents.add(new Event(date, title));
}
textArea.setText(displayEvents());

//events method
public String displayEvents(){
    String data ="";
    Event e;
    for(int i=0; i<vectorEvents.size(); i++){
        e =  vectorEvents.get(i);
        data += e.date + "\n";
    }
    return data;
}
2022年12月21日星期三00:00:00 CST

//loop in another method
for (int i = realYear-1900; i <= realYear-1900+10; i++){
    date.setYear(i);
    vectorEvents.add(new Event(date, title));
}
textArea.setText(displayEvents());

//events method
public String displayEvents(){
    String data ="";
    Event e;
    for(int i=0; i<vectorEvents.size(); i++){
        e =  vectorEvents.get(i);
        data += e.date + "\n";
    }
    return data;
}
2022年12月21日星期三00:00:00 CST

//loop in another method
for (int i = realYear-1900; i <= realYear-1900+10; i++){
    date.setYear(i);
    vectorEvents.add(new Event(date, title));
}
textArea.setText(displayEvents());

//events method
public String displayEvents(){
    String data ="";
    Event e;
    for(int i=0; i<vectorEvents.size(); i++){
        e =  vectorEvents.get(i);
        data += e.date + "\n";
    }
    return data;
}
//另一个方法中的循环

对于(int i=realYear-1900;i您将相同的
Date
对象添加到一个向量中10次(顺便说一句,它也不应该再被使用)。因此在循环结束时,向量中的每个引用都指向相同的日期对象,包含您在其上设置的最后一年

您需要在每次迭代中实例化一个新日期:

for (int i = realYear-1900; i <= realYear-1900+10; i++){
    Date copy = new Date(date.getTime());
    copy.setYear(i);
    vectorEvents.add(new Event(copy, title));
}

for(int i=realYear-1900;i
Date
对象在Java中是可变的,正如其他人指出的,您只使用一个实例并对其进行更改

如果
事件
对象是您的,那么从长远来看,最好的解决方案是更改构造函数并创建一个传递的
日期
的副本(按照“有效Java”中Bruce Eckel的说法制作一个防御性副本)


请注意,由于
字符串
是不可变的,因此您不需要对
标题执行相同的操作。

您是仅限于JDK类还是可以使用joda time?看起来您一直在更新相同的日期实例。Put
new Date()在你的循环中。谢谢你,我爱你!尝试了,但是我复制了=日期;非常感谢1的防御副本。我倾向于考虑和使用日期作为一个不可变的对象(它本来应该是从一开始),假设每个人都做同样的事情,但似乎有些人继续突变日期: