Cvičení – napsání kódu pro zobrazení všech dat poleAnimals

Dokončeno

V tomto cvičení napíšete strukturu vnořené smyčky a blok kódu výběru, který se používá k zobrazení informací o poli OurAnimals. Podrobné úkoly, které jste dokončili během tohoto cvičení, jsou:

  1. Vnější smyčka: sestavte vnější smyčku, která prochází zvířaty v poli ourAnimals.
  2. Kontrola dat: Napište kód, který kontroluje stávající data domácích mazlíčků a zobrazuje ID domácího mazlíčka, pokud data pro domácí mazlíčky existují.
  3. Vnitřní smyčka: Vytvořte vnitřní smyčku, která zobrazuje všechny charakteristiky mazlíčků, u kterých jsou přiřazena data.
  4. Ověřovací test: Proveďte ověřovací testy pro kód, který vyvíjíte v tomto cvičení.

Důležité

Před zahájením tohoto cvičení je nutné dokončit předchozí cvičení v tomto modulu.

Vytvoření smyčky pro iteraci pomocí našeho poleAnimals

V tomto úkolu vytvoříte vnější for smyčku, která se používá k iteraci přes zvířata v ourAnimals poli. Prozkoumáte vztah mezi dimenzemi pole a parametry smyčky for . Při práci s multidimenzionálními poli také zvažte rozdíly mezi příkazy for a foreach.

  1. Ujistěte se, že je visual Studio Code otevřený a že je váš soubor Program.cs viditelný v Editoru.

  2. Uvnitř bloku kódu pro switch(menuSelection) příkaz výběru vyhledejte následující řádky kódu:

    case "1":
        // List all of our current pet information
        Console.WriteLine("this app feature is coming soon - please check back to see progress.");
        Console.WriteLine("Press the Enter key to continue.");
        readResult = Console.ReadLine();
        break;
    
  3. Odstraňte příkaz Console.WriteLine() použitý k zobrazení zprávy "připravujeme" a ponechte prázdný řádek kódu ihned pod komentářem kódu // List all of our current pet information.

    Zpráva zpětné vazby nebude potřeba, protože budete zobrazovat obsah ourAnimals pole. Při vývoji kódu odpovídajícího ostatním vybraným nabídkám budou tyto zprávy zpětné vazby také aktualizovány.

    Nechejte zprávu s textem Press the Enter key to continue.

  4. Začněte na prázdném řádku kódu, který jste vytvořili, začněte příkazem for následujícím způsobem:

    for ()
    {
    }
    
  5. Zvažte, čeho s tímto for příkazem potřebujete dosáhnout.

    Vzpomeňte si, že for příkaz má tři části, které řídí, jak implementuje iterace: inicializátor,podmínku a iterátor. Hodnoty přiřazené k inicializátoru, podmínky a iterátoru jsou založené na tom, čeho je potřeba dosáhnout pomocí for příkazu.

    V tomto případě se smyčka for používá k iteraci pole ourAnimals . Víte, že pole jsou indexována od nuly, což znamená, že pole s n prvky je indexováno od 0 do n-1. Potřebujete inicializátor, podmínku a iterátor, aby odpovídaly rozměrům pole. V tomto případě chcete, aby for smyčka začínala na 0, zvyšovala o 1 a končila na maxPets-1.

    Vaše ourAnimals pole je deklarováno takto: string[,] ourAnimals = new string[maxPets, 6];. Víte, že hodnota přiřazená maxPets je 8. V této deklaraci maxPets určuje počet prvků v první dimenzi matice, nikoli číslo indexu založené na nule, které používáte k odkazování na prvky v matici. Proto, i když maxPets = 8, čísla indexů pole jsou v rozsahu od 0 do 7.

  6. Chcete-li zadat řídicí hodnotu smyčky for , aktualizujte kód následujícím způsobem:

    for (int i = 0; i < maxPets; i++)
    {
    }
    

    Jak vidíte, nastavení inicializátoru na int i = 0; je v souladu s indexem pole založeným na nule. Stejně tak nastavení podmínkyi < maxPets;, které odpovídá první dimenzi pole. Nakonec nastavením iterátoru na i++ zvýšíte hodnotu řízení smyčky o 1 při každé iteraci.

  7. Při iterování polem naše zvířata chvíli zvažte volbu mezi for výrazem a foreach výrazem.

    Cílem je iterovat každé zvíře v našem poliAnimals po jednom. Proč tedy nepoužít foreach smyčku? Koneckonců víte, že foreach příkaz je určený pro případy, kdy chcete iterovat každou položku v poli položek.

    Důvodem, proč v této situaci smyčku foreach nepoužíváte, je to, že ourAnimals pole je multidimenzionální pole. Vzhledem k tomu ourAnimals , že je multidimenzionální pole řetězců, každý prvek obsažený uvnitř ourAnimals je samostatná položka typu řetězec. Pokud jste k iteraci foreachpoužili smyčkuourAnimals, foreach rozpozná každý řetězec jako samostatnou položku v seznamu 48 řetězcových položek (8 x 6 = 48). Příkaz foreach nezpracuje dvě dimenze pole samostatně. Jinými slovy smyčka foreach nerozpozná 8 řádky řetězcových prvků, kde každý řádek obsahuje sloupec 6 položek. Vzhledem k tomu, že chcete pracovat s jedním zvířetem najednou a zpracovat všech šest charakteristik zvířat během jedné iterace, foreach není příkaz správnou volbou.

    Pokud ourAnimals je však pole jagged array nakonfigurované jako pole řetězcových polí, můžete použít foreach příkaz. V tomto případě byste vytvořili vnější smyčku foreach a druhou foreach pro vnitřní smyčku. Vnější smyčka by iterovala prvky "string array" v matici jagged array. Řetězcová pole jsou "řádky" v dvojrozměrném poli. Vnitřní smyčka by procházela prvky typu "string" obsažené v polích řetězců. Řetězcové prvky v řetězcových polích jsou "sloupce" v dvojrozměrném poli.

    Následující ukázka kódu demonstruje přístup jagged array.

    string[][] jaggedArray = new string[][]
    {
        new string[] { "one1", "two1", "three1", "four1", "five1", "six1" },
        new string[] { "one2", "two2", "three2", "four2", "five2", "six2" },
        new string[] { "one3", "two3", "three3", "four3", "five3", "six3" },
        new string[] { "one4", "two4", "three4", "four4", "five4", "six4" },
        new string[] { "one5", "two5", "three5", "four5", "five5", "six5" },
        new string[] { "one6", "two6", "three6", "four6", "five6", "six6" },
        new string[] { "one7", "two7", "three7", "four7", "five7", "six7" },
        new string[] { "one8", "two8", "three8", "four8", "five8", "six8" }
    };
    
    foreach (string[] array in jaggedArray)
    {
        foreach (string value in array)
        {
            Console.WriteLine(value);
        }
        Console.WriteLine();
    }
    

    U aplikace Contoso Pets je pravděpodobně jednodušší použít vícerozměrné pole řetězců a vnořené for smyčky, než zubaté pole a vnořené foreach smyčky. Teď, když uvidíte, jak jednotlivé možnosti fungují, můžete v budoucích projektech kódování zvolit svou vlastní volbu.

  8. V nabídce Soubor editoru Visual Studio Code vyberte Uložit.

  9. Otevřete integrovaný panel terminálu v editoru Visual Studio Code a zadejte příkaz k sestavení programu.

    Chcete-li otevřít terminál integrace ze zobrazení EXPLORER, klepněte pravým tlačítkem myši na Starter a pak vyberte Otevřít v integrovaném terminálu. K otevření panelu Integrovaný terminál můžete použít také nabídku Zobrazení nebo Terminál .

    Chcete-li vytvořit program, zadejte dotnet build příkaz z příkazového řádku terminálu.

  10. Opravte všechny chyby sestavení nebo upozornění, které se zobrazí před pokračováním.

    Mějte na paměti, že chybová a výstražná hlášení sestavení vám sdělují, v čem je problém a kde ho můžete najít. Při řešení problémů je nejlepší začít s problémy, ke kterým dochází na začátku kódu, a postupně se zaměřit na další.

  11. Zavřete panel Terminálu.

Kontrola existujících dat domácích mazlíčků a zobrazení výsledku

V tomto úkolu použijete příkaz if k vyhledání každého domácího mazlíčka ourAnimals v poli, které bylo přiřazeno údaje o charakteristikách domácích zvířat. Když se najde domácí mazlíček s přiřazenými daty, zobrazíte PETID. Pokud nejsou přiřazená žádná data, nic se nezobrazí. Spustíte kód, abyste ověřili, že vaše for a if výroky fungují správně.

  1. Vytvořte prázdný řádek kódu uvnitř vašeho for bloku kódu, a to následujícím způsobem:

    for (int i = 0; i < maxPets; i++)
    {
    
    }    
    
  2. Pokud chcete vytvořit if příkaz, který kontroluje data ID domácího mazlíčka, aktualizujte kód následujícím způsobem:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
        }
    }    
    
  3. Zvažte, co toto if tvrzení vyhodnocuje a proč.

    Nejprve zvažte levou stranu výrazu: ourAnimals[i, 0]. Všimněte si, že řídicí proměnná i smyčky se používá k určení zvířete, které se právě zkoumá. Jak si můžete vzpomenout, 0 v [i, 0] odpovídá petID charakteristice. Vzhledem k tomu, že první dimenze pole odpovídá "číslu" zvířete, tato část výrazu zajistí, že váš kód zkontroluje hodnotu přiřazenou petID pro každé zvíře v poli.

    Za druhé zvažte volbu relačního operátoru. Všimněte si, že se používá operátor != nerovnající se. Výraz se vyhodnotí jako true vždy, když se hodnota přiřazená k petID ourAnimals[i, 0], nerovná se hodnotě uvedené na pravé straně rovnice.

    Za třetí zvažte hodnotu na pravé straně rovnice. Všimněte si, že se používá statická řetězcová "ID #: " hodnota. Toto je výchozí hodnota přiřazená petID při vygenerování ukázkových dat. Pokud jsou vlastnosti přiřazeny zvířeti, petID hodnota se aktualizuje a NEBUDE se rovnat výchozí hodnotě.

    To vám řekne, že blok if kódu příkazu se spustí, když má aktuální zvíře definované vlastnosti.

    Poznámka:

    Toto je dobrý příklad, kdy != se má použít. Nezajímá vás, jaká hodnota je přiřazena k petID, pokud to není výchozí hodnota.

  4. Chcete-li vytvořit metodu Console.WriteLine(), která uvnitř bloku kódu příkazu petID zobrazí if, aktualizujte kód následujícím způsobem:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine(ourAnimals[i, 0]);
        }
    }    
    

    Všimněte si, že prvek pole lze použít jako argument při volání WriteLine() metody.

  5. V nabídce Soubor editoru Visual Studio Code vyberte Uložit.

  6. Otevřete panel integrovaného terminálu a zadejte příkaz k sestavení programu.

  7. Opravte všechny chyby sestavení nebo upozornění, které se zobrazí před pokračováním.

  8. Na příkazovém řádku terminálu zadejte příkaz pro spuštění programu.

    dotnet run Zadáním příkazu na příkazovém řádku terminálu spusťte kód programu.

    Pokud váš kód vygeneruje chybu za běhu, opravte chyby, uložte aktualizace a restartujte aplikaci.

  9. Na příkazovém řádku terminálu ověřte, že nová logika kódu funguje podle očekávání, zadejte 1.

    Měly by se zobrazit následující petID hodnoty:

    ID #: d1
    ID #: d2
    ID #: c3
    ID #: c4
    Press the Enter key to continue.
    

    Tato ID odpovídají zvířatům, kteří mají přiřazená data.

    Pokud kód při výběru možnosti nabídky 1 zobrazí jiný výstup, zkontrolujte a aktualizujte kód. Nezapomeňte, že po provedení aktualizací musíte soubor Program.cs uložit.

  10. Ukončete aplikaci a zavřete panel Terminálu.

Zobrazení všech charakteristik domácích mazlíčků pro domácí zvířata s přiřazenými daty

V této úloze vytvoříte smyčku for uvnitř if bloku kódu příkazu, který se používá k zobrazení všech charakteristik aktuálního domácího mazlíčka.

  1. V Editoru kódu vyhledejte v souboru Program.cs následující řádky kódu:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine(ourAnimals[i, 0]);
        }
    }    
    
  2. Pokud chcete vytvořit smyčku for , která bude iterovat charakteristiky každého domácího mazlíčka, aktualizujte kód následujícím způsobem:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine(ourAnimals[i, 0]);
            for (int j = 0; j < 6; j++)
            {
            }
        }
    }    
    

    Všimněte si, že teď máte druhou for smyčku, která je "vnořená" uvnitř bloku kódu první for smyčky. Jak víte, vnější smyčka prochází zvířata v ourAnimals poli. Záměrem je, aby vnitřní smyčka procházela vlastnostmi každého zvířete. Vzhledem k tomu, že data zvířat jsou uložena v multidimenzionálním poli, bude snadný přístup k charakteristikám zvířat.

  3. Věnujte chvíli kontrole for příkazu, který jste zadali.

    Všimněte si, že řídicí proměnná smyčky má název j. Při vnořování for smyček je konvenční použít i ve vnější a j ve vnitřní smyčce. Následující konvence, jako je tato, usnadňují ostatním čtení vašeho kódu.

    Vzhledem k tomu, že pro každé zvíře jsou uloženy šest charakteristik, je int j = 0; a pro podmínku je j < 6;. Tato kombinace inicializátoru a podmínky odpovídá požadovanému 0 - 5rozsahu indexu pole .

  4. Pokud chcete zobrazit každou charakteristiku domácího mazlíčka na samostatném řádku, aktualizujte kód následujícím způsobem:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine(ourAnimals[i, 0]);
            for (int j = 0; j < 6; j++)
            {
                Console.WriteLine(ourAnimals[i, j]);
            }
        }
    }    
    
  5. Zvažte vnořenou strukturu, kterou jste vytvořili, a zobrazený výstup, který váš kód vytvoří.

    Všimněte si, že hodnota zapsaná do konzoly používá řídicí proměnné z vnější i vnitřní smyčky.

    Znáte každou z následujících položek:

    • První rozměr ourAnimals pole odpovídá různým zvířatům.
    • Druhá dimenze pole odpovídá charakteristikám každého domácího ourAnimals mazlíčka.
    • Příkaz if zabraňuje spuštění vnitřní smyčky, pokud nejsou k aktuálnímu domácímu mazlíčku přiřazeny žádné data.
    • Vnitřní smyčka dokončí všechny iterace pro každou iteraci vnější smyčky.

    Proto víte, že vlastnosti každého zvířete budou zobrazeny podle očekávání.

  6. Pokud chcete nahradit zprávu PETID prázdným WriteLine()kódem, aktualizujte kód následujícím způsobem:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine();
            for (int j = 0; j < 6; j++)
            {
                Console.WriteLine(ourAnimals[i, j]);
            }
        }
    }    
    

    Tato poslední aktualizace usnadňuje zobrazení oddělení mezi domácími mazlíčky, když se výstup zobrazí v konzole.

  7. V nabídce Soubor editoru Visual Studio Code vyberte Uložit.

  8. Otevřete podokno Terminálu a sestavte program.

  9. Opravte všechny chyby sestavení nebo upozornění, které se zobrazí před pokračováním.

Zkontroluj svou práci

V této úloze spustíte aplikaci z integrovaného terminálu a ověříte, že vaše vnořená kombinace for a if příkazy vytvoří očekávaný výsledek.

  1. V případě potřeby otevřete integrovaný panel terminálu editoru Visual Studio Code.

  2. Na příkazovém řádku terminálu zadejte příkaz dotnet run.

  3. Na příkazovém řádku terminálu zadejte 1.

  4. Ověřte, že se data domácích zvířat zobrazují pro čtyři domácí zvířata, která byla přiřazena.

    ID #: d1
    Species: dog
    Age: 2
    Nickname: lola
    Physical description: medium sized cream colored female golden retriever weighing about 65 pounds. housebroken.
    Personality: loves to have her belly rubbed and likes to chase her tail. gives lots of kisses.
    
    ID #: d2
    Species: dog
    Age: 9
    Nickname: loki
    Physical description: large reddish-brown male golden retriever weighing about 85 pounds. housebroken.
    Personality: loves to have his ears rubbed when he greets you at the door, or at any time! loves to lean-in and give doggy hugs.
    
    ID #: c3
    Species: cat
    Age: 1
    Nickname: Puss
    Physical description: small white female weighing about 8 pounds. litter box trained.
    Personality: friendly
    
    ID #: c4
    Species: cat
    Age: ?
    Nickname:
    Physical description:
    Personality:
    Press the Enter key to continue.
    

    Poznámka:

    Pokud se nezobrazí očekávané výsledky, ujistěte se, že jste aktualizovaný soubor Program.cs uložili. Pokud se vám nezobrazují očekávané výsledky a nemůžete problém identifikovat, můžete prozkoumat kód Program.cs ve složce Final. Konečná složka je součástí stahování, které jste dokončili během instalace. Než zkontrolujete soubor Program.cs ve složce Final, doporučujeme trávit čas pokusem o identifikaci a opravu syntaxe a logického problému v kódu.

  5. Ukončete aplikaci a zavřete panel Terminálu.