Exerciții - Construirea și testarea unei bucle pentru introducerea noilor date despre animale de companie
În acest exercițiu, dezvoltați cod care controlează introducerea de date matrice noi ourAnimals . Calculați valorile inițiale ale variabilelor de control al buclelor și construiți bucla care colectează datele specificate de utilizator pentru animale. Activitățile detaliate pe care le efectuați în timpul acestui exercițiu sunt:
- Calculați petCount: scrieți cod care contorizează numărul de animale de companie din matricea
ourAnimalscare au atribuit date. - Mesaje condiționale: scrieți cod pentru a afișa ieșirea mesajului atunci când
petCounteste mai mic decâtmaxPets. - Buclă exterioară: construiți o structură de buclă care va fi utilizată pentru introducerea de date matrice noi
ourAnimals. - Criterii de ieșire: scrieți cod care evaluează condiția de ieșire pentru bucla "introduceți datele matrice noianimale".
- 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.
Contorizați numărul de animale de companie din matricea NoastrăAnimals
În această activitate, stabiliți criteriile de ieșire pentru bucla de introducere a datelor și creați o for buclă care poate fi utilizată pentru a contoriza numărul de animale de companie din ourAnimals care au atribuit date.
Asigurați-vă că este deschis Visual Studio Code și că fișierul Program.cs este vizibil în Editor.
Găsiți instrucțiunea
switch(menuSelection), apoi găsiți linia decase "2":cod.Găsiți instrucțiunea
Console.WriteLine()care afișează mesajul "în curând", apoi înlocuiți-l cu o linie de cod necompletată.În linia de cod necompletată pe care ați creat-o, pentru a declara
anotherPetvariabilele șipetCount, introduceți următorul cod:string anotherPet = "y"; int petCount = 0;Aceste două variabile controlează iterația unei
whilebucle utilizate pentru a introduce noi date despre animale de companie. Inițializați ambele variabile ca parte a declarației.anotherPeteste inițializată cu o valoare anterioarăyînceperii bucleiwhile. Va primi o valoare atribuită de utilizator, fieynîn buclăwhile.petCountreprezintă numărul de animale cu caracteristicile de animale atribuite. I se va atribui o valoare calculată în afara bucleiwhileși va fi incrementată de1fiecarewhiledată când se adaugă un animal nou laourAnimalsmatrice.
Important
Domeniul variabilelor ar trebui să fie întotdeauna cât mai îngust posibil. În aplicația Contoso Animale de companie, puteți să aflați
petCountdomeniul la nivel de aplicație, în loc să faceți obiectul blocului decase "2":cod. Domeniul mai mare v-ar permite să accesațipetCountde oriunde din aplicație. DacăpetCounta fost definit la nivel de aplicație, îi puteți atribui o valoare atunci când creați datele eșantion și gestionați prin programare valoarea sa în restul aplicației. De exemplu, atunci când găsiți o casă pentru un animal de companie și eliminați animalul de companie dinourAnimalsmatrice, puteți reducepetCountcu1. Întrebarea este, la ce nivel ar trebui să stabiliți o variabilă atunci când nu sunteți sigur dacă va fi utilizată în alte părți ale aplicației? În acest caz, este tentant să aflați domeniulpetCountla nivel de aplicație, chiar dacă nu îl utilizați în alt loc. Până la urmă, stabilireapetCountdomeniului la nivel de aplicație asigură că este disponibilă dacă vă hotărâți să o utilizați în altă parte. Poate că puteți să întindeți și alte variabile la nivel de aplicație. Astfel, variabilele dvs. sunt întotdeauna în domeniu și accesibile. Prin urmare, de ce nu variabile de domeniu la nivel de aplicație atunci când credeți că acestea pot fi utilizate mai târziu în aplicație? Stabilirea domeniului variabilelor la un nivel mai mare decât este necesar poate duce la probleme. Domeniul ridicat umflă cerințele de resurse ale aplicației și vă poate expune aplicația la riscuri de securitate inutile. Pe măsură ce aplicațiile devin mai mari și mai complexe, acestea necesită mai multe resurse. Telefoanele și computerele alocă memorie pentru aceste resurse atunci când sunt în domeniu. Pe măsură ce aplicațiile dvs. devin mai "reale", acestea devin mai accesibile. Aplicațiile sunt accesibile adesea din cloud sau din alte aplicații. Compuse aceste probleme, aplicațiile rămân adesea în rulare atunci când nu sunt utilizate. Este important să păstrați cerințele de resurse ale unei aplicații sub control și amprenta de securitate cât mai mică posibil. Deși sistemele de operare de astăzi fac o mare sarcină de gestionare a resurselor și securizarea aplicațiilor, este încă mai bine să vă mențineți variabilele definite la nivelul unde sunt de fapt necesare. În aplicația Contoso Animale de casă, dacă decideți să utilizațipetCountmai pe larg în aplicație, puteți actualiza codul la unpetCountnivel mai înalt. Nu uitați să păstrați variabilele dimensionate cât mai îngust posibil și să le măriți domeniul doar atunci când devine necesar.Pe linia de cod de sub declarațiile variabilei, pentru a crea o buclă care iterează prin animalele din
ourAnimalsmatrice, introduceți următorul cod:for (int i = 0; i < maxPets; i++) { }Acest cod ar trebui să arate familiar. Veți utiliza această
forbuclă de fiecare dată când iterați prinourAnimalsmatrice.În interiorul blocului de cod al buclei noastre
for, pentru a verifica dacă datele privind caracteristicile animalelor de companie au fost atribuite unui animal, introduceți următorul cod:if (ourAnimals[i, 0] != "ID #: ") { }Din nou, acest cod ar trebui să arate familiar. Veți utiliza acest
ifangajament de fiecare dată când verificați dacă au fost atribuite caracteristici ale animalelor de companie.În interiorul blocului de cod al incrementării
ifpe care l-ați creat, pentru a incrementapetCountcu 1, introduceți următorul cod:petCount += 1;Luați un minut pentru a examina bucla finalizată
for.Bucla finalizată
forar trebui să arate ca următorul cod:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { petCount += 1; } }Acest cod va trece în buclă prin
ourAnimalsverificarea matricei pentru datele atribuite. Atunci când găsește un animal cu date atribuite, acesta incrementeazăpetCounter.Î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 toate erorile de compilare pe care le vedeți raportate înainte de a continua.
Notă
Deocamdată, puteți ignora mesajul Avertisment despre
anotherPetatribuire, dar nu este utilizat niciodată. Veți adăuga cod care se utilizeazăanotherPetmai târziu în acest exercițiu.Dacă aveți erori de compilare, rețineți că mesajele de eroare de compilare și avertisment vă spun care este problema și unde o puteți găsi. Dacă actualizați codul, nu uitați să salvați modificările înainte de a reconstrui.
Închideți panoul Terminal.
Afișați ieșirea mesajului atunci când petCount este mai mic decât maxPets
În această activitate, verificați dacă petCount este mai mică decât maxPets și dacă este, afișați un mesaj pentru utilizator.
Pe o linie de cod necompletată de sub bucla pe
forcare ați creat-o, pentru a vedea dacăpetCounteste mai mică decâtmaxPets, introduceți următorul cod:if (petCount < maxPets) { }În interiorul blocului de cod al instrucțiunii
if, pentru a afișa un mesaj utilizatorului, introduceți următorul cod:Console.WriteLine($"We currently have {petCount} pets that need homes. We can manage {(maxPets - petCount)} more.");Utilizatorii aplicației sunt pe punctul de a introduce caracteristicile de companie. Acest mesaj oferă un context important.
Citiți un minut pentru a
case "2":revizui ramura de cod a extrasului deswitchcont.În acest moment, ramura de
case "2":cod ar trebui să arate ca următorul cod:case "2": // Add a new animal friend to the ourAnimals array string anotherPet = "y"; int petCount = 0; for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { petCount += 1; } } if (petCount < maxPets) { Console.WriteLine($"We currently have {petCount} pets that need homes. We can manage {(maxPets - petCount)} more."); } Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); break;Î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.
Remediați toate erorile de compilare pe care le vedeți raportate înainte de a continua.
Din nou, puteți ignora mesajul Avertisment despre
anotherPetatribuire, dar nu este utilizat niciodată. În următoarea activitate, veți începe să construiți buclawhilecare este utilizată pentru a introduce datele pentru unul sau mai multe animale de companie. Expresia pewhilecare o creați pentru buclă se va utilizaanotherPetși acest mesaj de avertizare va dispărea.Rețineți, mesajele de avertizare sunt lucruri despre care ar trebui să vă preocupați, dar acestea nu vă vor împiedica să rulați programul.
Î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.Atât timp cât codul dvs. nu generează o eroare la momentul rulării, meniul principal al aplicației ar trebui să fie afișat acum în panoul Terminal.
În linia de comandă Terminal, introduceți 2
Această valoare corespunde ramurii de
case "2":cod.Verificați dacă următorul mesaj este afișat în Terminal.
We currently have 4 pets that need homes. We can manage 4 more. Press the Enter key to continue.Dacă nu vedeți mesajul așteptat afișat, revizuiți codul pentru a identifica și a remedia problema. Salvați modificările, reconstruiți și rulați din nou aplicația. Nu uitați să faceți codul să funcționeze așa cum vă așteptați înainte de a continua.
În linia de comandă Terminal, apăsați pe Enter pentru a continua rularea aplicației.
Ieșiți din aplicație, apoi închideți panoul Terminal.
Construiți o structură de buclă care va fi utilizată pentru introducerea datelor matrice noi din matricea NoastrăAnimals
În această activitate, creați o while buclă care continuă să se itereze atât timp cât anotherPet este egală cu y și petCount este mai mică decât maxPets.
În Editor cod, creați o linie de cod necompletată sub blocul de
if (petCount < maxPets)cod.Pentru a începe procesul de creare a noii
whilebucle, introduceți următorul cod:while (anotherPet == "y" && petCount < maxPets) { }Î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.
Observați că nu mai primiți mesajul avertisment despre
anotherPetneutilizarea.Dacă au fost raportate erori de compilare sau avertismente, remediați problemele înainte de a continua.
Verificați condiția de ieșire pentru buclă de casă nouă
În această activitate, actualizați blocul de while (anotherPet == "y" && petCount < maxPets) cod. Noul cod incrementează petCount , apoi verifică dacă petCount este mai mic decât maxPets. Dacă petCount este mai mic decât maxPets, întrebați utilizatorul dacă dorește să introducă informații pentru un alt animal de companie și asigurați-vă că răspunsul este fie y sau n. După blocul de while (anotherPet == "y" && petCount < maxPets) cod, verificați valoarea .petCount Dacă petCount este egal cu maxPets, informați utilizatorul că nu mai pot fi adăugate animale de companie.
Notă
Codul utilizat pentru introducerea datelor despre animale de companie este dezvoltat în următorul exercițiu. Deocamdată, petCount este incrementată ca și cum ar fi introduse și salvate date în ourAnimals matrice. Acest lucru vă permite să terminați de dezvoltat logica de cod asociată cu bucla while .
Creați o linie de cod necompletată în interiorul blocului
while (anotherPet == "y" && petCount < maxPets)de cod al buclei pe care ați creat-o în activitatea anterioară.Pentru a incrementa
petCount, introduceți următorul cod:// increment petCount (the array is zero-based, so we increment the counter after adding to the array) petCount = petCount + 1;Pentru a verifica dacă
petCounteste mai mic decâtmaxPets, introduceți următorul cod:// check maxPet limit if (petCount < maxPets) { }În interiorul blocului de cod al declarației pe
ifcare ați creat-o, pentru a întreba utilizatorul dacă dorește să adauge un alt animal de companie, introduceți următorul cod:// another pet? Console.WriteLine("Do you want to enter info for another pet (y/n)");WriteLine()Sub mesajul pe care l-ați introdus, pentru a citi răspunsul utilizatorului și a vă asigura că utilizatorul a introdus "y" sau "n", introduceți următorul cod:do { readResult = Console.ReadLine(); if (readResult != null) { anotherPet = readResult.ToLower(); } } while (anotherPet != "y" && anotherPet != "n");Găsiți instrucțiunea care se
breaksepară decase "2";instrucțiuneacase "3";dvsswitch.Console.WriteLine()Observați instrucțiunile deConsole.ReadLine()la sfârșitul codului nostrucase "2";.Acest cod afișează un mesaj utilizatorului, apoi întrerupe aplicația.
Pentru a încadra
Console.WriteLine()instrucțiunile șiConsole.ReadLine()într-oifinstrucțiune, actualizați codul după cum urmează:if (petCount >= maxPets) { Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); } break; case "3":Valoarea
petCounteste incrementată în interiorul bucleiwhile. DacăpetCounteste egal cumaxPets, nu mai pot fi adăugate animale de companie laourAnimalsmatrice. Ar trebui să anunțați utilizatorul când se întâmplă acest lucru.Pentru a informa utilizatorul că Contoso Pets și-a atins capacitatea, actualizați codul după cum urmează:
if (petCount >= maxPets) { Console.WriteLine("We have reached our limit on the number of pets that we can manage."); Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); } break; case "3":Citiți un minut pentru a revizui codul în
whilebuclă și mesajul de utilizator pe care l-ați creat.Bucla
while (anotherPet == "y" && petCount < maxPets)și codul care afișează mesajul de utilizator ar trebui să arate ca următorul cod:while (anotherPet == "y" && petCount < maxPets) { // increment petCount (the array is zero-based, so we increment the counter after adding to the array) petCount = petCount + 1; // check maxPet limit if (petCount < maxPets) { // another pet? Console.WriteLine("Do you want to enter info for another pet (y/n)"); do { readResult = Console.ReadLine(); if (readResult != null) { anotherPet = readResult.ToLower(); } } while (anotherPet != "y" && anotherPet != "n"); } } if (petCount >= maxPets) { Console.WriteLine("We have reached our limit on the number of pets that we can manage."); Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); }Î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.
Remediați orice erori sau avertismente de compilare pe care le vedeți raportate înainte de a continua.
Verificați-vă activitatea
În această activitate, rulați aplicația noastră de la Terminalul integrat și verificați dacă logica de buclare și ramificare pe care ați creat-o funcționează așa cum vă așteptați.
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 2
Verificați dacă vedeți următoarele mesaje:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n)În linia de comandă Terminal, introduceți n
Verificați dacă codul iese din buclă pentru introducerea de animale noi atunci când ați introdus "n".
Dacă logica de cod funcționează așa cum vă așteptați, ar trebui să vedeți meniul principal afișat în Terminal.
Dacă codul dvs. nu iese din buclă atunci când vă așteptați, apăsați Ctrl + C în Terminal pentru a forța executarea să se oprească. Trebuie să parcurgeți manual codul și să trasați valorile variabilelor criteriilor de ieșire. Actualizați codul dacă este necesar pentru a vă asigura că ieșiți din
whilebuclă atunci când utilizatorul introduce "n". Salvați modificările, reconstruiți programul și parcurgeți testul de verificare pentru a reveni în acest moment.În linia de comandă Terminal, introduceți 2
Încă o dată, veți vedea următoarele mesaje afișate:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n)În linia de comandă Terminal, introduceți y
Luați un minut pentru a lua în considerare modul
petCountîn care este utilizat în codul dvs.Trebuie să înțelegeți logica codului înainte de a vă valida codul.
În acest caz, logica de cod se bazează pe relația dintre
petCountșimaxPets. Știi cămaxPetseste atribuită o valoare de8, dar cum rămâne cupetCount? Următoarele elemente vă ajută să evaluați logica pe care ați implementat-o:Știi că
petCounteste4atunci când introduceți prima iterație a bucleiwhile.Știi că
petCounteste incrementat de fiecare dată când iterează buclawhile.Știți că valoarea atribuită
petCountși modul în care sunt incrementate afectează modul înpetCountcareourAnimalssunt stocate datele în matrice. Următoarele elemente explică relația dintrepetCountdatele stocate înourAnimals:- Aplicația adaugă patru animale de companie la
ourAnimalsmatrice atunci când creează datele eșantion. - Aplicația stochează date noi în
ourAnimalsmatrice atunci când valoareapetCounteste4. Nu e o eroare. Codul are sens atunci când vă reamintiți că elementele matrice sunt bazate pe zero. De exemplu,ourAnimals[0,0]conține ID-ul de companie pentru animal și1conține ID-ul de companieourAnimals[3,0]pentru animal4. Prin urmare, atunci cândpetCount4stocați date pentru al cincilea animal de companie. - Aplicația va stoca datele de companie în matrice înainte de a incrementa
petCount. - Aplicația se incrementează
petCountînainte de a-i solicita utilizatorului să adauge un alt animal de companie. - Atunci când aplicația afișează solicitarea Doriți să introduceți informații pentru alt animal de companie (y/n) pentru prima dată,
petCounteste deja setată la5.
- Aplicația adaugă patru animale de companie la
Dacă utilizatorul introduce y la primul Doriți să introduceți informații pentru un alt mesaj de companie (y/n), știți că:
- Bucla
while (anotherPet == "y" && petCount < maxPets)se va itera. Știi că bucla va itera pentru căanotherPet == "y"șipetCount < maxPets. - Valoarea atribuită
petCountva fi incrementată (când iterează buclawhile). - Valoarea atribuită
petCountva fi6(după ce utilizatorul intră prima dată).
- Bucla
Rețineți această analiză a logicii codului în timp ce continuați testarea aplicației.
Observați că panoul Terminal se actualizează cu același mesaj "un alt animal?", dar codul dvs. nu afișează un mesaj actualizat
petCount.Panoul Terminal ar trebui să afișeze acum următoarea ieșire:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n) y Do you want to enter info for another pet (y/n)În linia de comandă Terminal, introduceți y
Când introduceți
ya doua oară,petCounteste incrementat la7. DecipetCount, este încă mai mic decâtmaxPetsÎn linia de comandă Terminal, introduceți y
Când introduceți
ya treia oară,petCounteste incrementat la8. DecipetCount, acum este egal cumaxPetsVerificați dacă codul iese din
whilebuclă atunci când introduceți y a treia oară.Panoul Terminal ar trebui să afișeze acum următoarea ieșire:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n) y Do you want to enter info for another pet (y/n) y Do you want to enter info for another pet (y/n) y We have reached our limit on the number of pets that we can manage. Press the Enter key to continue.Dacă codul nu iese din buclă atunci când vă așteptați, parcurgeți manual codul și trasați valorile variabilelor criteriilor de ieșire. Actualizați codul pentru a vă asigura că ieșiți din buclă atunci când
petCountajungeți la o valoare egală cumaxPets. Continuați să răspundeți la "y" până când știți căpetCounteste egal cumaxPets, care are valoarea implicită .8În linia de comandă Terminal, apăsați pe Enter pentru a continua rularea aplicației.
Ieșiți din aplicație, apoi închideți panoul Terminal.