价值在分层ArrayList

时间:2019-01-16 20:11:34

标签: java for-loop arraylist hierarchy

对于我的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类内没有错误。我承诺。如果有人可以看看,我将不胜感激!生无可恋! :))

1 个答案:

答案 0 :(得分:0)

您看到的主要问题是您有两个静态数组yymm。首先,如果您已经在全局变量中存储了多年的信息,那么几个月就拥有一个全局变量是没有意义的,只需要维护更多的数据和代码即可。

第二个是我在您的代码中发现错误的地方

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()),而对于其他值,则类似。