Avatar billede mcgoat Nybegynder
10. august 2006 - 09:38 Der er 12 kommentarer og
3 løsninger

Hjælp til noob klasse

Hejsa og godmorgen eksperter :)
Har nu endelig sat mig for at jeg vil lære alt der her klasse sjov, for mine koder bliver tit uendelig lange fordi jeg ikke genbruger noget som helst.

Har lavet dette indtil videre:

class person
    {
        String P_navn;
        int P_alder;
        int P_spillernr;

        public person(String Navn, int Alder, int Spillernr)
        {
            P_alder = Alder;
            P_navn = Navn;
            P_spillernr = Spillernr;
        }

        public String navn
        {
            get { return P_navn; }
            set { P_navn = value; }
        }

        public int alder
        {
            get { return P_alder; }
            set { P_alder = value; }
        }

        public int spillernr
        {
            get { return P_spillernr; }
            set { P_spillernr = value; }
        }
    }

    class hold
    {
        person[] holdspillere = new person[5];

        public void addplayer(person teammate)
        {
            holdspillere[0] = teammate;
        }

        public void udskriv()
        {
            for (int i = 0; i < holdspillere.Length; i++)
            {
                Console.WriteLine("Navn: {0}, Alder: {1}, Spillernr: {2}", holdspillere[i].navn,holdspillere[i].alder.ToString(), holdspillere[i].spillernr.ToString());
            }
        }
    }





  static void Main(string[] args)
        {
            person person1 = new person("Hans Erik", 50, 1);
            person person2 = new person("Knud Madsen", 43, 5);
            person person3 = new person("Jesper Poulsen", 45, 11);
            person person4 = new person("Emanuel Jarxz", 51, 15);
            person person5 = new person("Jens Otto", 47, 22);
            hold hold1 = new hold();
            hold1.addplayer(person1);
            hold1.addplayer(person2);
            hold1.addplayer(person3);
            hold1.addplayer(person4);
            hold1.addplayer(person5);
            hold1.udskriv();
            Console.ReadKey();
        }


Nu vil jeg jo gerne bare vide:
1: er det den "rigtige" måde at bruge klasser på?
2: Hvorfor virker overstående ikke? :P
- den kommer med "Object reference not set to an instance of an object" i min udskriv funktion
Avatar billede mcgoat Nybegynder
10. august 2006 - 09:39 #1
den udskriver dog den sidste person (Jens Otto) inden den kommer med den fejl, men også kun den sidste, ikke de andre :P
Avatar billede mcgoat Nybegynder
10. august 2006 - 09:42 #2
hmm.. det var jo nok fordi jeg tilføjede dem alle sammen til [0] :P hvordan tilføjer jeg dem til den næste plads? skal jeg se hvor mange der ligger i forvejen og lægge den på næste?

        public void addplayer(person teammate)
        {
            holdspillere[holdspillere.Length + 1] = teammate;
        }

?
Avatar billede jtofte Nybegynder
10. august 2006 - 09:51 #3
Hej holdspillere.Length vil returnerer 5 da det er det du har defineret Arrayen til, men du kunne sætte en private variabel som du lægger en til hver gang.
public void addplayer(person teammate)
{
      holdspillere[index++] = teammate;
     
}
private int index = 0;
Avatar billede mcgoat Nybegynder
10. august 2006 - 09:58 #4
Undere mig lidt over de ikke har lavet det sådan man bare definerer et array, uden nogen specifik størrelse, og så udvider det sig selv når man lægger ting i.

Men nu virker programmet da.

Men er det den "rigtige" måde at lave klasser på, eller har I nogle gode tips og triks?
Avatar billede spif2001 Nybegynder
10. august 2006 - 10:00 #5
du kan også vælge selv at styre index udefra - så kan du jo overskrive de enkelte spillere i listen:

public void addplayer(person teammate, int index)
{
      holdspillere[index] = teammate;   
}
Avatar billede spif2001 Nybegynder
10. august 2006 - 10:02 #6
mht. array, så brug enten ArrayList fra System.Collections eller brug en generisk liste fra System.Collections.Generic.

Generisk liste:

List<person> personListe = new List<person>();
Avatar billede jtofte Nybegynder
10. august 2006 - 10:02 #7
jeg er voldsom god til klasseprogrammering, så jeg har ikke så mange ideer, men der findes en arraylist der selv udvider sig den hedder Arraylist, den ligger i namespace System.Collection, der er der en add function
Avatar billede mcgoat Nybegynder
10. august 2006 - 10:11 #8
har lavet om så det ser sådan ud:

hold1.addplayers(person1,person2,person3,person4,person5);



        public void addplayers(person teammate1, person teammate2, person teammate3, person teammate4, person teammate5)
        {
            holdspillere.Add(teammate1);
            holdspillere.Add(teammate2);
            holdspillere.Add(teammate3);
            holdspillere.Add(teammate4);
            holdspillere.Add(teammate5);
        }

        public void udskriv()
        {
            Console.WriteLine("Hold: {0}\n", P_holdnavn);
            for (int i = 0; i < holdspillere.Count; i++)
            {
                Console.WriteLine("Navn: {0}, Alder: {1}, Spillernr: {2}", holdspillere[i].navn, holdspillere[i].alder.ToString(), holdspillere[i].spillernr.ToString());
            }
        }

Men den kommer med fejl nu i min udskriv funktion og siger: 'object' does not contain a deffinition for 'navn' og 'alder' og 'spillernr'

Skal jeg lave en cast et sted så den ved det er typen person?
Avatar billede mcgoat Nybegynder
10. august 2006 - 10:12 #9
i et: ArrayList holdspillere = new ArrayList();
Avatar billede Syska Mester
10. august 2006 - 10:34 #10
Du skal bruge en Generisk list, så er du fri for at caste.... som spif skriver

System.Collections.Generics.List<Person> list = new System.Collections.Generics.List<Person>();

og så kan du nemt få fat i de forskellige properties...

// ouT
Avatar billede mcgoat Nybegynder
10. august 2006 - 10:45 #11
Vil jeg gøre så :) må lige have fundet ud af hvad forskellen er på ArrayList og en Generics list :)

Smid et svar de herre :)
Avatar billede spif2001 Nybegynder
10. august 2006 - 10:49 #12
svar - en generisk liste er ny feature i .net 2.0.

Gør at din liste bliver type safe - dvs hvis du laver den person liste, så kan du kun proppe personer i (eller får du fejl), og du er (som buzzzz siger) fri for at typecaste.

Meget nemmere at arbejde med end f.eks. den gamle ArrayList.
Avatar billede mcgoat Nybegynder
10. august 2006 - 10:59 #13
buzzzz og jtofte smid svar :)
Avatar billede jtofte Nybegynder
10. august 2006 - 13:08 #14
svar
Avatar billede Syska Mester
10. august 2006 - 13:48 #15
svar, giv spif2001 flest point
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