» »

[C#] Omejitev izpisa v foreach

[C#] Omejitev izpisa v foreach

Cvenemir ::

Lp. Kako bi popravil metodo, da bi izpisala napako "Osebe ni na seznamu" šele ko preleti celoten seznam, ne pa za vsako osebo, ki se ne ujema z iskanjem?

 public static void IzpisiOseboIme(List<Oseba> osebe)
        {
            Console.WriteLine("\nVnesite ime osebe, katere podatke želite prikazati: ");
            string firstName = Console.ReadLine();

            foreach (Oseba os in osebe)
            {
                if (firstName == os.Ime)
                {
                    Console.WriteLine("\n************************************");
                    Console.WriteLine("Podatki iskane osebe so:\n ");
                    Console.WriteLine("Ime: {0}", os.Ime);
                    Console.WriteLine("Priimek: {0}", os.Priimek);
                    Console.WriteLine("Datum rojstva: {0}", os.DatumRojstva);
                    Console.WriteLine("Kraj bivanja: {0}", os.Naslov);
                    Console.WriteLine("************************************");
                    break;
                }
                else
                {
                    Console.WriteLine("\nIskane osebe ni na seznamu. ");
                }
            }
        }

Jeremias ::

Že sam prav razmišljaš, samo še udejaniš to. Torej "Osebe ni na seznamu" hočeš izpisati ko preletiš cel seznam. To pomeni da izpis moraš prestavit iz foreach zanke. Drugi korak, to hočeš izpisat samo takrat ko vpisane osebe res ni v seznamu, to pa dosežeš tako, da ko najdeš osebo "si nastaviš zastavico osebaNajdena" in po zanki preverjaš to "zastavico", če ta zastavica ni nastavljena, torej oseba ne obstaja, izpišeše "Osebe ni na seznamu".
Lp
Jernej

Cvenemir ::

Mogoče kakšen primer? Kaj sploh so zastavice? Neki sem na googlu iskau "c# flags" pa nisem nič koristnega našu.

noraguta ::

ja funkcija naj ne bo viod ampak string. in če je leta prazen izjaviš tisto kar si hotel. al pa naj bo bool. scope ti pomaga pri kodiranju.
Pust' ot pobyedy k pobyedye vyedyot!

mallard ::

Če v seznamu ni podvojenih imen, se lahko vrneš iz funkcije takoj, ko najdeš rezultat:
 public static void IzpisiOseboIme(List<Oseba> osebe)
        {
            Console.WriteLine("\nVnesite ime osebe, katere podatke želite prikazati: ");
            string firstName = Console.ReadLine();

            foreach (Oseba os in osebe)
            {
                if (firstName == os.Ime)
                {
                    Console.WriteLine("\n************************************");
                    Console.WriteLine("Podatki iskane osebe so:\n ");
                    Console.WriteLine("Ime: {0}", os.Ime);
                    Console.WriteLine("Priimek: {0}", os.Priimek);
                    Console.WriteLine("Datum rojstva: {0}", os.DatumRojstva);
                    Console.WriteLine("Kraj bivanja: {0}", os.Naslov);
                    Console.WriteLine("************************************");
                    return;
                }
            }

            Console.WriteLine("\nIskane osebe ni na seznamu. ");
        }

V nasprotnem primeru pa kot je Jeremias rekel, z zastavico (ker moraš pač čez cel seznam).

Zgodovina sprememb…

  • spremenilo: mallard ()

Cvenemir ::

Seznam ne vsebuje podvojenih imen, tako, da bom v tem primeru uporabil kar nasvet od mallard-a. Se mi zdi še najpreprostejše.

^TMS^ ::

Morda ti svetujem še preprostejši način, če so ti bolj všeč kolekcije. Glede na to, da imaš podatke shranjene v Listu se lahko poslužuješ metode Contains(T). Ta ti vrne boolean vrednost, ki pove, ali se podani objekt nahaja v seznamu. Tako bi lahko pogoj preverjal še pred zanko in ustrezno odreagiral.
Pravtako bi za iskanje lahko uporabil metodo Find, ki ti vrne prvi element v seznamu, kateri ustreza predikatu. Da pa bi bilo še manj pisanja, pa bi lahko tudi to metodo združil s Contains in preverjal, če je vrnjeni element null.
Edinole, kar bi moral dodati, da bi zadeva delala, je metodo Equals v razred Oseba.
To iterate is human, to recurse divine.

Cvenemir ::

Najlepša hvala. Bom preizkusil :)

Cvenemir ::

Lp,

Zvedel sem, da profesor preverja tudi, če so na seznamu podvojena imena, oz. katerakoli druga lastnost. Lahko nekdo pokaže primer uporabe zastavice?

^TMS^ ::

public static void IzpisiOseboIme(List<Oseba> osebe)
       {
           Console.WriteLine("\nVnesite ime osebe, katere podatke želite prikazati: ");
           string firstName = Console.ReadLine();
 			bool obstaja = false;	
 			
           foreach (Oseba os in osebe)
           {
               if (firstName == os.Ime)
               {
                   Console.WriteLine("\n************************************");
                   Console.WriteLine("Podatki iskane osebe so:\n ");
                   Console.WriteLine("Ime: {0}", os.Ime);
                   Console.WriteLine("Priimek: {0}", os.Priimek);
                   Console.WriteLine("Datum rojstva: {0}", os.DatumRojstva);
                   Console.WriteLine("Kraj bivanja: {0}", os.Naslov);
                   Console.WriteLine("************************************");
                   obstaja = true;
               }
           }
 			
 	   if(!obstaja)
               Console.WriteLine("\nIskane osebe ni na seznamu. ");
       }
To iterate is human, to recurse divine.

Zgodovina sprememb…

  • spremenil: ^TMS^ ()

Cvenemir ::

Odlično deluje. hvala


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] Evidenca oseb

Oddelek: Programiranje
71084 (769) DaMachk
»

[C#] Deserializacija

Oddelek: Programiranje
181758 (1361) Cvenemir
»

[c#] Ustvarjanje objekta v drugem razredu

Oddelek: Programiranje
81572 (1517) Cvenemir
»

c sharp LinkedList - Naloga

Oddelek: Programiranje
91699 (1650) Msatir
»

[C#] Kopiranje osebe iz seznama v drug seznam

Oddelek: Programiranje
51399 (1260) Presidente

Več podobnih tem