Exercițiul - Scrieți codul pentru a afișa toate datele noastre matriceAnimals
În acest exercițiu, scrieți structura imbricată de buclare și blocul de cod de selecție utilizat pentru a afișa informațiile matricei NoastreAnimals. Activitățile detaliate pe care le efectuați în timpul acestui exercițiu sunt:
- Buclă exterioară: construiește bucla exterioară care iterează prin animalele din matricea NoastrăAnimale.
- Verificarea datelor: scrieți cod care verifică datele de companie existente și afișează ID-ul de companie dacă există date pentru un animal de companie.
- Buclă internă: construiți o buclă internă care afișează toate caracteristicile animalelor de companie pentru animale de companie cu date atribuite.
- Test de verificare: efectuați teste de verificare pentru codul pe care îl dezvoltați în acest exercițiu.
Important
Trebuie să finalizați exercițiul anterior din acest modul înainte de a începe acest exercițiu.
Construiți o buclă pentru a parcurge matricea noastrăAnimals
În această activitate, creați bucla exterioară for utilizată pentru a itera prin animalele din ourAnimals matrice. Examinați relația dintre dimensiunile matricei și parametrii buclei for . De asemenea, luați în considerare diferențele dintre utilizarea for instrucțiunilor și foreach instrucțiunilor atunci când lucrați cu matrice multidimensionale.
Asigurați-vă că este deschis Visual Studio Code și că fișierul Program.cs este vizibil în Editor.
În interiorul blocului de cod pentru instrucțiunea de
switch(menuSelection)selecție, găsiți următoarele linii de cod: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;Ștergeți instrucțiunea
Console.WriteLine()utilizată pentru a afișa mesajul "în curând" și lăsați o linie de cod necompletată sub linia de comentariu a// List all of our current pet informationcodului.Mesajul de feedback nu va fi necesar, deoarece veți afișa conținutul matricei
ourAnimals. Pe măsură ce dezvoltați codul corespunzător celorlalte selecții de meniu, aceste mesaje de feedback vor fi actualizate și ele.Lăsați mesajul care spune
Press the Enter key to continue.Începând cu linia de cod necompletată pe care ați creat-o, începeți o
forinstrucțiune după cum urmează:for () { }Luați un minut pentru a lua în considerare ceea ce trebuie să realizați cu acest
forangajament.Rețineți că o
forinstrucțiune are trei părți care controlează modul în care implementează iterații: inițializatorul,condiția pentru șiiterator. Valorile atribuite inițializatorului,pentru condiție și pentru iterator se bazează pe ceea ce trebuie să obțineți cu instrucțiuneafor.În acest caz, bucla
foreste utilizată pentru a itera prinourAnimalsmatrice. Știți că matricele sunt zero indexate, ceea ce înseamnă că o matrice cunelemente este indexată de la la0lan-1. Aveți nevoie de inițializatorul pentrucondiție și ca iteratorul să se potrivească dimensiunilor matricei. În acest caz, doriți ca buclaforsă înceapă de la0, incrementare cu1și să se termine lamaxPets-1.Matricea este
ourAnimalsdeclarată după cum urmează:string[,] ourAnimals = new string[maxPets, 6];. Știți că valoarea atribuitămaxPetseste8. În această declarație,maxPetsspecifică numărul de elemente din prima dimensiune a matricei, nu numărul indexului bazat pe zero pe care îl utilizați pentru a face referire la elementele din matrice. Prin urmare, deșimaxPets = 8, zona de numere index matrice de la până la07.Pentru a specifica valoarea controlului buclei
for, actualizați codul după cum urmează:for (int i = 0; i < maxPets; i++) { }După cum puteți vedea, setarea pentru inițializator pentru a
int i = 0;se alinia cu indexul matricei bazate pe zero. La fel, setarea condiției pentru a sei < maxPets;alinia cu prima dimensiune a matricei. În sfârșit, setarea pentru ca iteratorul săi++incrementeze valoarea1controlului buclei pentru fiecare iterație.Luați un minut pentru a lua în considerare alegerea dintre o
fordeclarație și oforeachdeclarație atunci când iterați prin matricea noastrăAnimals.Scopul este de a itera prin fiecare animal din matricea NoastrăAnimale pe rând. Deci, de ce nu folosiți o buclă
foreach? La urma urmei, știți că instrucțiuneaforeacheste proiectată pentru cazuri atunci când doriți să iterați prin fiecare element dintr-o matrice de elemente.Motivul pentru care nu utilizați o
foreachbuclă în această situație este că matriceaourAnimalseste multidimensională. DeoareceourAnimalseste o matrice de șiruri multidimensionale, fiecare element din interiorourAnimalseste un element separat de tip șir. Dacă ați utilizat oforeachbuclă de iterat prinourAnimals,foreachfiecare șir ar recunoaște fiecare șir ca element separat într-o listă de 48 de elemente de șir (8 x 6 = 48). Instrucțiuneaforeachnu ar procesa cele două dimensiuni matrice separat. Cu alte cuvinte, oforeachbuclă nu va recunoaște8rândurile de elemente de șir, unde fiecare rând conține o coloană de6elemente. Deoarece doriți să lucrați cu un singur animal o dată și să procesați toate cele șase caracteristici ale animalelor în timpul unei singure iterații, oforeachdeclarație nu este alegerea potrivită.Cu toate acestea, dacă matricea
ourAnimalsa fost o matrice zimțată configurată ca matrice de șiruri, puteți utiliza oforeachinstrucțiune. În acest caz, creați oforeachbuclă exterioară și o secundăforeachpentru o buclă internă. Bucla exterioară s-ar itera prin elementele "matrice șir" din matricea zimțată. Matricele de șiruri sunt "rândurile" din matricea bidimensională. Bucla internă ar itera prin elementele "șir" conținute în matricele de șiruri. Elementele șir din matricele de șiruri sunt "coloanele" din matricea bidimensională.Următorul exemplu de cod demonstrează abordarea matricei zimțate.
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(); }Pentru aplicația Contoso Pets, probabil că este mai ușor să utilizați o matrice șir multidimensională și bucle imbricate
for, nu o matriceforeachși bucle imbricate. Acum, că vedeți cum funcționează fiecare opțiune, puteți alege propria opțiune în proiectele de codificare viitoare.În meniul Fișier Visual Studio Code, selectați Salvare.
Deschideți panoul Terminal integrat în Visual Studio Code și introduceți comanda Construiți programul.
Pentru a deschide Terminalul de integrare din vizualizarea EXPLORER, faceți clic dreapta pe Starter, apoi selectați Deschidere în terminal integrat. De asemenea, puteți utiliza meniul Vizualizare sau Terminal pentru a deschide panoul Terminal integrat.
Pentru a vă construi programul, introduceți
dotnet buildcomanda din linia de comandă Terminal.Remediați orice erori de compilare sau avertismente pe care le vedeți raportate înainte de a continua.
Rețineți că mesajele de eroare și avertizare de compilare vă spun care este problema și unde o puteți găsi. Atunci când rezolvați problemele, se recomandă să începeți cu problemele care apar în partea de sus a codului și să lucrați în jos.
Închideți panoul Terminal.
Verificarea datelor de companie existente și afișarea rezultatului
În această activitate, utilizați o if instrucțiune pentru a găsi fiecare animal de companie din matricea ourAnimals care a fost atribuită datelor despre caracteristicile de companie. Atunci când se găsește un animal de companie cu date atribuite, afișați ID-ul de companie. Atunci când nu există date atribuite, nu se afișează nimic. Rulați codul pentru a verifica dacă for instrucțiunile dvs. și if cele funcționează corect.
Creați o linie de cod necompletată în interiorul blocului de cod de instrucțiune
for, după cum urmează:for (int i = 0; i < maxPets; i++) { }Pentru a crea o
ifinstrucțiune care verifică dacă există date despre ID-ul de companie, actualizați codul după cum urmează:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { } }Luați un minut pentru a lua în considerare ce evaluează acest
ifangajament și de ce.Mai întâi, luați în considerare partea stângă a expresiei:
ourAnimals[i, 0]. Observați că variabilaide control a buclei este utilizată pentru a specifica animalul care este examinat. După cum este posibil să vă reamintiți, elementele0în[i, 0]corespund caracteristicepetID. Deoarece prima dimensiune a matricei corespunde cu "numărul" animalului, această parte a expresiei asigură că codul verifică valoarea atribuităpetIDfiecărui animal din matrice.În al doilea rând, luați în considerare alegerea operatorului de comparație. Observați că operatorul nu este egal cu,
!=este utilizat. Expresia se evaluează catrueoricând valoarea atribuită petID,ourAnimals[i, 0], NU este egală cu valoarea listată în partea dreaptă a ecuației.În al treilea rând, luați în considerare valoarea din partea dreaptă a ecuației. Observați că se utilizează o valoare de șir statică a
"ID #: ". Aceasta este valoarea implicită atribuităpetIDatunci când se generează datele eșantion. Atunci când caracteristicile sunt atribuite unui animal,petIDvaloarea este actualizată și NU va fi egală cu valoarea implicită.Acest lucru vă spune că blocul de cod de
ifinstrucțiune va fi executat atunci când animalul curent are caracteristicile definite.Notă
Acesta este un exemplu bun pentru când
!=ar trebui utilizat. Nu vă pasă la ce valoare este atribuităpetIDatât timp cât nu este valoarea implicită.Pentru a crea o
Console.WriteLine()metodă care să afișeze bloculpetIDde cod dinifinstrucțiune, actualizați codul după cum urmează:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { Console.WriteLine(ourAnimals[i, 0]); } }Observați că un element matrice poate fi utilizat ca argument atunci când apelați
WriteLine()metoda.În meniul Fișier Visual Studio Code, selectați Salvare.
Deschideți panoul Terminal integrat și introduceți comanda Construiți programul.
Remediați orice erori de compilare sau avertismente pe care le vedeți raportate înainte de a continua.
În linia de comandă Terminal, introduceți comanda pentru a rula programul.
dotnet runIntroduceți comanda în linia de comandă Terminal pentru a rula codul de program.Dacă codul generează o eroare la momentul rulării, remediați erorile, salvați actualizările și reporniți aplicația.
În linia de comandă Terminal, pentru a verifica dacă noua logică de cod funcționează așa cum vă așteptați, introduceți 1
Ar trebui să vedeți următoarele
petIDvalori afișate:ID #: d1 ID #: d2 ID #: c3 ID #: c4 Press the Enter key to continue.Aceste ID-uri corespund animalelor de companie care au atribuit date.
Dacă codul afișează ieșire diferită atunci când selectați opțiunea de meniu 1, revizuiți și actualizați codul. Rețineți că trebuie să salvați fișierul Program.cs după ce efectuați actualizări.
Ieșiți din aplicație, apoi închideți panoul Terminal.
Afișarea tuturor caracteristicilor de companie pentru animale de companie cu date atribuite
În această activitate, creați o for buclă în interiorul blocului de cod de if instrucțiune utilizat pentru a afișa toate caracteristicile animalelor de companie curente.
În Editorul de cod, găsiți următoarele linii de cod în fișierul Program.cs:
for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { Console.WriteLine(ourAnimals[i, 0]); } }Pentru a crea bucla
forcare se va itera prin caracteristicile fiecărui animal de companie, actualizați codul după cum urmează:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { Console.WriteLine(ourAnimals[i, 0]); for (int j = 0; j < 6; j++) { } } }Observați că acum aveți o a doua
forbuclă care este "imbricată" în interiorul blocului de cod al primeiforbucle. După cum știți, bucla exterioară iterează prin animalele dinourAnimalsmatrice. Intenția este ca bucla interioară să itereze prin caracteristicile fiecărui animal. Deoarece datele despre animale sunt stocate într-o matrice multidimensională, acestea vor fi ușor de accesat caracteristicile animalelor.Citiți un minut pentru a revizui declarația
forpe care ați introdus-o.Observați că variabila de control buclă se numește
j. Atunci când imbricațiforbucle, o abordare convențională este să o utilizațiiîn bucla exterioară șijîn bucla interioară. Urmărirea convențiilor ca aceasta simplifică citirea codului de către alte persoane.Deoarece sunt stocate șase caracteristici pentru fiecare animal, inițializatorul
int j = 0;este și condiția estej < 6;. Această combinație de inițializator și condiție se potrivește cu zona indexului matricei de care aveți nevoie,0-5.Pentru a afișa fiecare caracteristică a unui animal de companie pe o linie separată, actualizați codul după cum urmează:
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]); } } }Aveți nevoie de un minut pentru a lua în considerare structura imbricată pe care ați creat-o și rezultatul afișat pe care îl va produce codul.
Observați că valoarea scrisă pe consolă,
ourAnimals[i, j]utilizează variabilele de control al buclelor, atât din buclele exterioare, cât și din cele interioarefor.Știți fiecare dintre următoarele elemente:
- Prima dimensiune a matricei
ourAnimalscorespunde diferitelor animale de companie. - A doua dimensiune a matricei
ourAnimalscorespunde caracteristicilor fiecărui animal de companie. - Instrucțiunea
ifîmpiedică rularea buclei interne atunci când nu există date despre animale de companie atribuite animalelor de companie curente. - Bucla internă finalizează toate iterările sale pentru fiecare iterație a buclei exterioare.
Prin urmare, știți că caracteristicile fiecărui animal vor fi afișate așa cum se intenționează.
- Prima dimensiune a matricei
Pentru a înlocui mesajul petID cu un cod necompletat
WriteLine(), actualizați codul după cum urmează: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]); } } }Această actualizare finală vă ajută să vedeți separarea între animale de companie atunci când ieșirea este afișată pe consolă.
În meniul Fișier Visual Studio Code, selectați Salvare.
Deschideți un panou terminal și construiți programul.
Remediați orice erori de compilare sau avertismente pe care le vedeți raportate înainte de a continua.
Verificați-vă lucrul
În această activitate, rulați aplicația de la Terminalul integrat și verificați dacă combinația imbricată de for instrucțiuni și if generează rezultatul așteptat.
Dacă este necesar, deschideți panoul Terminal integrat visual Studio Code.
În linia de comandă Terminal, introduceți run dotnet
În linia de comandă Terminal, introduceți 1
Verificați dacă se afișează datele despre animale de companie pentru cei patru animale de companie cărora li s-au atribuit date.
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.Notă
Dacă nu vedeți rezultatele așteptate afișate, asigurați-vă că ați salvat fișierul Program.cs actualizat. Dacă nu vedeți rezultatele așteptate și nu puteți identifica problema, puteți examina codul Program.cs din folderul Final. Folderul Final este inclus ca parte a descărcării pe care ați finalizat-o în timpul instalării. Vă recomandăm să petreceți timp încercând să identificați și să remediați problema de sintaxă și logică din cod înainte de a verifica fișierul Program.cs din folderul Final.
Ieșiți din aplicație, apoi închideți panoul Terminal.