Avatar billede jerving Nybegynder
31. maj 2007 - 20:02

Problemer med generering af forskellige schedules på baggrund af

Problemer med generering af forskellige schedules
Idéen med nedenstående kode er, at en træstruktur indeholdende knuder rummende data af typen Task<int> gennem rekursion af metoden skal opbygge en Liste af Shedule<int, LinkedList<int, Reservation>> (som er en udvidet Dictionary).

Træet er indrettet således, at der ved knuder hvis underknuder alle skal inddrages i samme Schedule er angivet en dette med en Enum – Quaf.and - mens der ved andre, hvis underknuder er individuelle ”vej” til at imødegå deres forældreknude, er angivet dette med et Quaf.or.

Meningen er, at stødes der på en knude der er angivet med Quaf.or, skal der oprettes en kopi af den Schedule, som anvendes i det pågældende scope og arbejdes videre med denne, for de underliggende knuder.

Således er det eksempelvis meningen, at et træ med to .Quaf.or-forekomster, der hver har to underliggende børn, skal generere fire Schedules til listen Shedule<int, LinkedList<int, Reservation>>.

Problemet er, at de fire Schedules der genereres af koden nedenfor indeholder nøjagtig de samme data frem for – som det er tanken - at indeholde fire forskellige Schedules.
Er der nogen, der kan hitte ud af hvorfor det forekommer?

private void ScheduleNodes(INode<Task<int>> node, Schedule<int, LinkedList<Reservation>> currentSchedule)
{
    Schedule<int, LinkedList<Reservation>> sch = currentSchedule;

    foreach (INode<Task<int>> n in node.DirectChildren.Nodes)
        {
            if (node.Quaf.Equals(Quaf.or))
                {
                    //If the the node's child nodes have a Quaf.or relationship,
                    //create a copy of the Schedule in a new instance to make an optional alternative.
                    Schedule<int, LinkedList<Reservation>> s = new Schedule<int, LinkedList<Reservation>>(currentSchedule);
                    schedules.Remove(currentSchedule);
                    sch = s;
                    this.schedules.Add(sch);
                    ScheduleNodes(n, sch);
                }
                else
                {
                    ScheduleNodes(n, sch);
                }
        }
        //Invariant - node = Root -> node.Data = null
        if (node.Data != null)
        {
            foreach (Method<int> m in node.Data.Methods)
            {
                ScheduleMethod(m, sch);
            }

    }
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester