Avatar
milan
Neregistrovaný
Avatar
milan:

Zdravím,

potřeboval bych menší radu ohledně listu. Mám list vytvořený list 6 uživatelů, každý má jméno, přijmení, pohlaví, věk a rok narození. Potřebuji mezi nimi najít všechny muže a udělat jejich průměrný věk. Chtěl jsem pomocí cyklu projít jednotlivé řádky a pokud je na řádku "muž" tak vzít "ítou" pozici na které se nachází věk, uložit hodnotu do pole a pokračovat dál, nakonec bych z hodnot uložených v poli udělal průměr, ale prakticky se mi to moc nedaří.

 
Odpovědět 21.5.2013 21:01
Avatar
milan
Neregistrovaný
Avatar
milan:

Právě že mam hotový jen list uživatelů, nevím jakým způsobem ho mam procházet...kdybych to načítal ze souboru, tak použiju metodu split a pomocí cyklu bych prošel všechny řádky a vzal si potřebná data, ale nevím jak se to dělá v listu

 
Nahoru Odpovědět 21.5.2013 21:17
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na milan
Petr Nymsa:

Předpokládám že uživatele máš jako Objekt Uzivatel, kde máš tyto vlastnosti. Poté tedy projet cyklem, přes Foreach list. A když to je muž přičteš si hodnotu nebo někam zaznamenáš jeho věk.

Takže třída bude vypadat nějak takto. Napíšu to zjednodušeně, časem se snad naučíš to napsat líp

 class Uzivatel
    {
        // místo ošklivých public by se měly použít Properties - Vlasnosti
        public int vek;
        public string jmeno;
        public bool muz; // místo bool by se mělo použít Enum


        // další si dopiš

        public Uzivatel(string jmeno,int vek,bool muz)
        {
            this.vek = vek;
            this.jmeno = jmeno;
            this.muz = muz;
        }

    }

// někde v metodě main nebo jinde

 //testovací data
            List<Uzivatel> uzivatele = new List<Uzivatel>();

            uzivatele.Add(new Uzivatel("Pepa",15,true));
            uzivatele.Add(new Uzivatel("Alžběta", 15, false));
            uzivatele.Add(new Uzivatel("jakub", 35, true));
            uzivatele.Add(new Uzivatel("Jaroslav", 58, true));
            uzivatele.Add(new Uzivatel("Anna", 68, false));
            uzivatele.Add(new Uzivatel("Blažena", 15, false));
            uzivatele.Add(new Uzivatel("Hermelina", 25, false));

            int pocet = 0;
            int soucet = 0;

            // iterace uživateli
            foreach (Uzivatel p in uzivatele)
            {
                if (p.muz == true) // je to muž ?
                {
                    pocet++;
                    soucet += p.vek;
                }
            }

            Console.WriteLine(soucet/pocet);

Pokud něčemu z tohoto nerozumíš, což předpokládám, podívej se na zdejší seriál. zační základy a pak přejdi na OOP

Nahoru Odpovědět 21.5.2013 21:20
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
milan
Neregistrovaný
Avatar
milan:

List mam vytvořený, tak jak uvádíš, jen tam mám muže nebo ženu definované pomocí stringu, takže jsem zkoušel udělat podmínku:

if (uzivatele[0] == "muz")

protože na [0] pozici v listu mam pohlaví a pak jsem chtěl ukládat hodnotu věk na pozici[3] pomocí int.Parse do pole s kterým bych dál pracoval, ale tohle vypadá jednodušeji, navíc mi to s tím indexováním moc nešlo

 
Nahoru Odpovědět 21.5.2013 21:37
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na milan
Jan Vargovský:

Pošli tvůj kod, trošku nerozumím tomu, že máš na nějaké pozici věk atd ... takový to byl případ, kdyby jsi to měl v poli.
Minimálně bys to měl mít jak píše Zirko, takže pošli tvůj kod ať ti můžem popřípadě poradit

 
Nahoru Odpovědět 21.5.2013 21:44
Avatar
milan
Neregistrovaný
Avatar
milan:

Já myslel že list má indexaci obdobně jako pole

 
Nahoru Odpovědět 21.5.2013 21:48
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:

To ano, ale ty indexuješ ty jednotlivé uživatele, když vezmu kousek kodu od Zirka, tak je to

("Anna", 68, false) // 0
("Blažena", 15, false) // 1
("Hermelina", 25, false) // 2

A ty k těm uživatelům přistupuješ k celým těm datům a k jednotlivým položkám jako jméno, věk atd přistupuješ přes tu tečkovou notaci a dostáváš se k těm property té třídy

 
Nahoru Odpovědět 21.5.2013 21:59
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na milan
Petr Nymsa:

Samozřejmě že má indexasi stejnou :) Ale je blbost dělat list kde budeš mít jméno,věk, muž/žěna, a pak zase jméno, věk .. nevyznáš se v tom. Proto tu máme OOP . Vytvoříš si objekt a vlistu budeš mít tyto objekty. Něco málo si o to zde přečti a pochopíš k čemu to je ;)

Nahoru Odpovědět 21.5.2013 22:01
Pokrok nezastavíš, neusni a jdi s ním vpřed
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.