【问题标题】:Value getting lost in hierarchical ArrayList值在分层 ArrayList 中丢失
【发布时间】:2019-01-16 20:11:34
【问题描述】:

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

【问题讨论】:

标签: java for-loop arraylist hierarchy


【解决方案1】:

在我看来,您的主要问题是您有两个静态数组,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()),其他值类似。

【讨论】:

  • 感谢您的回复!虽然我不太确定如果 mm 数组列表包含 12 个不同的 Month 对象,为什么所有 Year 对象将共享相同的 Month 数组对象。
  • 因为mm 是静态的,所以只有一个实例。所以 1986 年的 y 将使用与任何其他年份相同的 mm 实例,例如 1989 年或 1974 年的 y 或...尽可能避免使用静态变量,它们是糟糕的代码设计。
猜你喜欢
  • 1970-01-01
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
相关资源
最近更新 更多