对于我的compsci项目,我正在创建一个gui日历,该日历应该存储一年中每个月的每个日期的不同信息。这是我实现这种层次关系的代码。 yy和mm是公共静态ArrayList。
//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);
}
在填充数组列表之后,我需要能够通过如下方式逐层访问来获取选定日期的年份:
yy.get(50).getMonth().get(3).getDate()[5].getYy()
问题是当我将月份m添加到mm中时,dd包含正确的年份值。但是,在mm.add(m)行之后,任何日期的每年值都设置为1968。因此,如果我在for循环中进行了mm.get(2).date[3].getYy()
操作,它将获得正确的年份值,但是在我执行之后将y添加到yy并在日期上执行getYy();日期只是失去分配的年份值。
我已经尝试过使用月份和年份的构造函数,将y和m设为公共静态,以及所有可能的方法。我已经坚持了好几天。我只是不知道为什么这不能正确存储值。这个问题仅在我的代码的这一部分引起;在Month或Year或DateCal类内没有错误。我承诺。如果有人可以看看,我将不胜感激!生无可恋! :))
答案 0 :(得分:0)
您看到的主要问题是您有两个静态数组yy
和mm
。首先,如果您已经在全局变量中存储了多年的信息,那么几个月就拥有一个全局变量是没有意义的,只需要维护更多的数据和代码即可。
第二个是我在您的代码中发现错误的地方
y.setMonth(mm);
´
在这里,您将静态数组分配给year实例,这意味着所有Year
对象将共享相同的Month
数组对象。
我将从杀死mm
数组开始,让Year具有一个内部数组,其中包含(12)个Month对象。因此,也许将setMonth
更改为addMonth
在执行此操作时,还有另外一件小事可以避免错误
y.setYear(1968+i);
然后,当您想再次设置相同的值时,就不应该dd[c].setYy(1968+i)
,而应该dd[c].setYy(y.getYear())
,而对于其他值,则类似。