Java 向向量添加定期日期
我的日历程序仍然使用Java上不推荐使用的setYear(),不知怎的,它显示的是同一年,如下所示: 2022年12月21日星期三00:00:00 CSTJava 向向量添加定期日期,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
//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;iDate
对象在Java中是可变的,正如其他人指出的,您只使用一个实例并对其进行更改
如果事件
对象是您的,那么从长远来看,最好的解决方案是更改构造函数并创建一个传递的日期
的副本(按照“有效Java”中Bruce Eckel的说法制作一个防御性副本)
请注意,由于字符串
是不可变的,因此您不需要对标题执行相同的操作。您是仅限于JDK类还是可以使用joda time?看起来您一直在更新相同的日期实例。Putnew Date()在你的循环中。谢谢你,我爱你!尝试了,但是我复制了=日期;非常感谢1的防御副本。我倾向于考虑和使用日期作为一个不可变的对象(它本来应该是从一开始),假设每个人都做同样的事情,但似乎有些人继续突变日期: