IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Wayne
Člen
Avatar
Wayne:3.7.2014 17:38

Ahoj mám problém s tím že mi nefunguje výpis nějakého Listu. Vytvořil jsem si metodu vypisSeznam, kterou když zavolám tak mi to nic nevypíše. Když tuto metodu volám v metodě přidej tak najednou funguje nevím kde by mohl být problém. Zde přikládám potřebný kód

 public List<Osoba> pridej(string jmeno, string prijmeni) {
            adresar.Add(new Osoba(jmeno,prijmeni));
            vypisSeznam();
            return adresar;
        }

        public List<Osoba> vypisSeznam() {
            List<Osoba> osoby = new List<Osoba>();
            foreach (Osoba o in adresar) {
                osoby.Add(o);
                Console.WriteLine();
                Console.WriteLine("V seznamu je uloženo");
                Console.Write(o+", ");
            }

            return osoby;
        }


Databaze databaze = new Databaze();
        List<Osoba> adresar = new List<Osoba>();
        public List<Osoba> pridejUzivate()
        {
            Console.WriteLine("Zadej jmeno");
            string jmeno = Console.ReadLine();
            Console.WriteLine("Zadej příjmení");
            string prijmeni = Console.ReadLine();
            List<Osoba> osoba = databaze.pridej(jmeno, prijmeni);
            Console.WriteLine();
            Console.WriteLine("Do databáze byla přidána osoba " + jmeno + " " + prijmeni);
            return osoba;
        }

//Spouštění programu
Databaze databaze = new Databaze();
            Diar diar = new Diar();
            char volba = '0';
            while (volba !='3') {
                Console.WriteLine();
                Console.WriteLine("Výběr možností \n -----------------------");
                Console.WriteLine("(1)-Přidej uživatele");
                Console.WriteLine("(2)-Vypiš seznam");
                Console.WriteLine("(3)-Ukonči");
                Console.WriteLine();
                Console.WriteLine("Zvolte volbu");
                volba = char.Parse(Console.ReadLine());
                switch (volba) {
                    case '1':
                        diar.pridejUzivate();
                        break;
                    case '2':
                        databaze.vypisSeznam();
                        break;
 
Odpovědět
3.7.2014 17:38
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Wayne
Jan Vargovský:3.7.2014 17:59
public List<Osoba> vypisSeznam() {
           List<Osoba> osoby = new List<Osoba>();
           foreach (Osoba o in adresar) {
               osoby.Add(o);
               Console.WriteLine();
               Console.WriteLine("V seznamu je uloženo");
               Console.Write(o+", ");
           }

           return osoby;
       }

Tudle implementaci nechápu. Metoda dělá 2 věci - (1)vypisuje osoby, kopiruje osoby do nového seznamu (jen přidává další referenci) a ten následně vrací(2). Proč ta metoda nedělá jen tohle?

public void vypisSeznam() {
           foreach (Osoba o in adresar) {
               Console.WriteLine();
               Console.WriteLine("V seznamu je uloženo");
               Console.Write(o+", ");
           }
       }

Metoda pridej zase vrací celý adresář, proč?

Chybí implementace třídy Diar, která přidává uživatele... Aspoň napiš kde jaká metoda je, takhle nevím co v jaké třídě máš a je těžké radit, když nám ani neukážeš co máš uvnitř těch tříd (soukromé proměnné).

 
Nahoru Odpovědět
3.7.2014 17:59
Avatar
Wayne
Člen
Avatar
Odpovídá na Jan Vargovský
Wayne:3.7.2014 19:05
class Diar
   {
       Databaze databaze = new Databaze();
       List<Osoba> adresar = new List<Osoba>();
       public List<Osoba> pridejUzivate()
       {
           Console.WriteLine("Zadej jmeno");
           string jmeno = Console.ReadLine();
           Console.WriteLine("Zadej příjmení");
           string prijmeni = Console.ReadLine();
           List<Osoba> osoba = databaze.pridej(jmeno, prijmeni);
           Console.WriteLine();
           Console.WriteLine("Do databáze byla přidána osoba " + jmeno + " " + prijmeni);
           return osoba;
       }


   }
 
Nahoru Odpovědět
3.7.2014 19:05
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Wayne
Jan Vargovský:3.7.2014 19:35

Takže máš zvlášť třídu Diar, která má v sobě adresar. Pak máš třídu Databaze, která ma v sobě taktéž adresar. Jestli ty adresare nereferencují na jednu kolekci, tak máš 2 kolekce, ale každá má svoje instance Osoby.

Tu databázi bych klidně smazal a nechal si tam jen tu třídu Diar.

PS: Přepiš si ty metody, aby nevracely ten list.

 
Nahoru Odpovědět
3.7.2014 19:35
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 4 zpráv z 4.