Значение теряется в иерархическом ArrayList - PullRequest
0 голосов
/ 16 января 2019

для моего проекта compsci Я создаю графический интерфейс, который должен хранить различную информацию для каждой даты месяца года. Это мой код достижения этих иерархических отношений. yy и mm являются открытыми статическими ArrayLists.

//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()

Проблема в том, что когда я добавляю Month m в mm, dd содержит правильные значения года. Однако после строки mm.add (m) значение каждого года для любой даты устанавливается равным 1968. Поэтому, если бы я сделал mm.get(2).date[3].getYy() внутри цикла for, он бы получил правильное значение года, но не после того, как я добавил y чтобы yy и сделать getYy () на свидание; даты просто теряют присвоенное значение года.

Я пытался использовать конструкторы месяц и год, сделать y и m общедоступными статичными, и все, что мог. Я застрял на этом в течение нескольких дней. Я просто не могу понять, почему это не будет правильно хранить значения. Проблема возникает из этой части моего кода и только здесь; в классах Month, Year или DateCal ошибок нет. Я обещаю. Я был бы очень признателен, если бы кто-нибудь мог взглянуть! Я в отчаянии! :))

1 Ответ

0 голосов
/ 16 января 2019

Ваша основная проблема, как я вижу, состоит в том, что у вас есть два статических массива, yy и mm.Во-первых, не имеет смысла иметь глобальную переменную в течение нескольких месяцев, когда вы уже годами располагаете этой информацией в глобальной переменной, просто больше данных и кода для обслуживания.

Во-вторых, здесь я обнаружил ошибку вваш код

y.setMonth(mm);

´ Здесь вы присваиваете статический массив экземпляру года, что означает, что все объекты Year будут использовать один и тот же объект массива Month.

Я бы начал с убийстваmm массив и пусть Year имеет внутренний массив (12) объектов месяца.Поэтому, возможно, измените setMonth на addMonth

Еще одна незначительная вещь, чтобы избежать ошибок, когда вы делаете

y.setYear(1968+i);

, а затем позже, когда вы хотите установить то же значение снова, вы не должнысделать dd[c].setYy(1968+i), но вместо dd[c].setYy(y.getYear()) и аналогично для других значений.

...