Diskuze: Výpis objektů z kolekce

C# .NET .NET (C# a Visual Basic) Výpis objektů z kolekce American English version English version

Avatar
Wayne
Člen
Avatar
Wayne:

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ý
Redaktor
Avatar
Odpovídá na Wayne
Jan Vargovský:
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:
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ý
Redaktor
Avatar
Odpovídá na Wayne
Jan Vargovský:

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.