java值在分层ArrayList中丢失
对于我的compsci项目,我正在创建一个gui日历,它应该为一年中的每个月的每个日期存储不同的信息。这是我实现这种等级关系的代码。yy和mm是公共静态数组列表
//Populating yy arraylist
for (int i = 0; i<52; i++)
{
Year y = new Year();
y.setYear(1968+i);
for (int n = 0; n<12;n++)
{
Month m = new Month();
DateCal[] dd = new DateCal[31];
m.setMonth(n+1);
for(int c = 0; c<31;c++)
{
dd[c] = new DateCal();
dd[c].setDd(c+1);
dd[c].setMm(n+1);
dd[c].setYy(1968+i);
}
m.setDate(dd);
mm.add(m);
}
y.setMonth(mm);
yy.add(y);
}
填充arraylist后,我需要能够通过逐层访问来获取所选日期的年份,如下所示:
yy.get(50).getMonth().get(3).getDate()[5].getYy()
问题是,当我将月份m添加到mm中时,dd包含正确的年份值。但是,后面的行是mm。添加(m),任何日期的每年值都设置为1968。因此,如果我在for循环中执行了mm.get(2).date[3].getYy()
,那么它将获得正确的年份值,但不是在我将y添加到yy并在某个日期执行getYy()之后;日期将丢失指定的年份值
我已经试着使用构造函数了好几个月,好几年了,把y和m都变成公共静态的,以及我能做的一切。这件事我已经坚持了好几天了。我就是不明白为什么这不能正确地存储值。问题源于我代码的这一部分,并且仅限于此;在月份、年份或DateCal类中没有错误。我保证。如果有人能看一看,我将不胜感激!我绝望了!:)
# 1 楼答案
在我看来,您的主要问题是有两个静态数组,
yy
和mm
。首先,如果你已经在全局变量中保存了数年的信息,那么几个月内保存一个全局变量是没有意义的,只需要维护更多的数据和代码其次,我发现了代码中的一个错误
' 在这里,您将静态数组分配给year实例,这意味着所有
Year
对象将共享相同的Month
数组对象首先,我会删除
mm
数组,让Year拥有一个包含(12)个月对象的内部数组。所以也许把setMonth
改成addMonth
还有一件小事可以避免虫子,当你这样做的时候
之后,当您想再次设置相同的值时,您不应该执行
dd[c].setYy(1968+i)
,而应该执行dd[c].setYy(y.getYear())
和其他值的类似操作