有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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

    其次,我发现了代码中的一个错误

    y.setMonth(mm);
    

    ' 在这里,您将静态数组分配给year实例,这意味着所有Year对象将共享相同的Month数组对象

    首先,我会删除mm数组,让Year拥有一个包含(12)个月对象的内部数组。所以也许把setMonth改成addMonth

    还有一件小事可以避免虫子,当你这样做的时候

    y.setYear(1968+i);
    

    之后,当您想再次设置相同的值时,您不应该执行dd[c].setYy(1968+i),而应该执行dd[c].setYy(y.getYear())和其他值的类似操作