Cvičení – napsání kódu pro zobrazení všech dat poleAnimals
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:
- Vnější smyčka: sestavte vnější smyčku, která prochází zvířaty v poli ourAnimals.
- 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í.
- 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.
- 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.
Ujistěte se, že je visual Studio Code otevřený a že je váš soubor Program.cs viditelný v Editoru.
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;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
ourAnimalspole. 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.Začněte na prázdném řádku kódu, který jste vytvořili, začněte příkazem
fornásledujícím způsobem:for () { }Zvažte, čeho s tímto
forpříkazem potřebujete dosáhnout.Vzpomeňte si, že
forpří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íforpříkazu.V tomto případě se smyčka
forpoužívá k iteraci poleourAnimals. Víte, že pole jsou indexována od nuly, což znamená, že pole snprvky je indexováno od0don-1. Potřebujete inicializátor, podmínku a iterátor, aby odpovídaly rozměrům pole. V tomto případě chcete, abyforsmyčka začínala na0, zvyšovala o1a končila namaxPets-1.Vaše
ourAnimalspole je deklarováno takto:string[,] ourAnimals = new string[maxPets, 6];. Víte, že hodnota přiřazenámaxPetsje8. V této deklaracimaxPetsurč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 od0do7.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 nai++zvýšíte hodnotu řízení smyčky o1při každé iteraci.Při iterování polem naše zvířata chvíli zvažte volbu mezi
forvýrazem aforeachvýrazem.Cílem je iterovat každé zvíře v našem poliAnimals po jednom. Proč tedy nepoužít
foreachsmyčku? Koneckonců víte, žeforeachpří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
foreachnepoužíváte, je to, žeourAnimalspole je multidimenzionální pole. Vzhledem k tomuourAnimals, že je multidimenzionální pole řetězců, každý prvek obsažený uvnitřourAnimalsje samostatná položka typu řetězec. Pokud jste k iteraciforeachpoužili smyčkuourAnimals,foreachrozpozná každý řetězec jako samostatnou položku v seznamu 48 řetězcových položek (8 x 6 = 48). Příkazforeachnezpracuje dvě dimenze pole samostatně. Jinými slovy smyčkaforeachnerozpozná8řádky řetězcových prvků, kde každý řádek obsahuje sloupec6polož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,foreachnení příkaz správnou volbou.Pokud
ourAnimalsje však pole jagged array nakonfigurované jako pole řetězcových polí, můžete použítforeachpříkaz. V tomto případě byste vytvořili vnější smyčkuforeacha druhouforeachpro 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é
forsmyčky, než zubaté pole a vnořenéforeachsmyčky. Teď, když uvidíte, jak jednotlivé možnosti fungují, můžete v budoucích projektech kódování zvolit svou vlastní volbu.V nabídce Soubor editoru Visual Studio Code vyberte Uložit.
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 buildpříkaz z příkazového řádku terminálu.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ší.
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ě.
Vytvořte prázdný řádek kódu uvnitř vašeho
forbloku kódu, a to následujícím způsobem:for (int i = 0; i < maxPets; i++) { }Pokud chcete vytvořit
ifpří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 #: ") { } }Zvažte, co toto
iftvrzení vyhodnocuje a proč.Nejprve zvažte levou stranu výrazu:
ourAnimals[i, 0]. Všimněte si, že řídicí proměnnáismyčky se používá k určení zvířete, které se právě zkoumá. Jak si můžete vzpomenout,0v[i, 0]odpovídápetIDcharakteristice. 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řazenoupetIDpro 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í jakotruevždy, když se hodnota přiřazená k petIDourAnimals[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ápetIDpři vygenerování ukázkových dat. Pokud jsou vlastnosti přiřazeny zvířeti,petIDhodnota se aktualizuje a NEBUDE se rovnat výchozí hodnotě.To vám řekne, že blok
ifkó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 kpetID, pokud to není výchozí hodnota.Chcete-li vytvořit metodu
Console.WriteLine(), která uvnitř bloku kódu příkazupetIDzobrazí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.V nabídce Soubor editoru Visual Studio Code vyberte Uložit.
Otevřete panel integrovaného terminálu a zadejte příkaz k sestavení programu.
Opravte všechny chyby sestavení nebo upozornění, které se zobrazí před pokračováním.
Na příkazovém řádku terminálu zadejte příkaz pro spuštění programu.
dotnet runZadá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.
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í
petIDhodnoty: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.
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.
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]); } }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
forsmyčku, která je "vnořená" uvnitř bloku kódu prvníforsmyčky. Jak víte, vnější smyčka prochází zvířata vourAnimalspoli. 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.Věnujte chvíli kontrole
forpříkazu, který jste zadali.Všimněte si, že řídicí proměnná smyčky má název
j. Při vnořováníforsmyček je konvenční použítive vnější ajve 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 jej < 6;. Tato kombinace inicializátoru a podmínky odpovídá požadovanému0-5rozsahu indexu pole .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]); } } }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
ourAnimalspole odpovídá různým zvířatům. - Druhá dimenze pole odpovídá charakteristikám každého domácího
ourAnimalsmazlíčka. - Příkaz
ifzabraň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í.
- První rozměr
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.
V nabídce Soubor editoru Visual Studio Code vyberte Uložit.
Otevřete podokno Terminálu a sestavte program.
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.
V případě potřeby otevřete integrovaný panel terminálu editoru Visual Studio Code.
Na příkazovém řádku terminálu zadejte příkaz dotnet run.
Na příkazovém řádku terminálu zadejte 1.
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.
Ukončete aplikaci a zavřete panel Terminálu.