Exerciții - Construirea și testarea unei bucle pentru introducerea noilor date despre animale de companie

Finalizat

Î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:

  1. Calculați petCount: scrieți cod care contorizează numărul de animale de companie din matricea ourAnimals care au atribuit date.
  2. Mesaje condiționale: scrieți cod pentru a afișa ieșirea mesajului atunci când petCount este mai mic decât maxPets.
  3. Buclă exterioară: construiți o structură de buclă care va fi utilizată pentru introducerea de date matrice noi ourAnimals .
  4. Criterii de ieșire: scrieți cod care evaluează condiția de ieșire pentru bucla "introduceți datele matrice noianimale".
  5. 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.

  1. Asigurați-vă că este deschis Visual Studio Code și că fișierul Program.cs este vizibil în Editor.

  2. Găsiți instrucțiunea switch(menuSelection) , apoi găsiți linia de case "2": cod.

  3. Găsiți instrucțiunea Console.WriteLine() care afișează mesajul "în curând", apoi înlocuiți-l cu o linie de cod necompletată.

  4. În linia de cod necompletată pe care ați creat-o, pentru a declara anotherPet variabilele și petCount , introduceți următorul cod:

    string anotherPet = "y";
    int petCount = 0;
    

    Aceste două variabile controlează iterația unei while bucle utilizate pentru a introduce noi date despre animale de companie. Inițializați ambele variabile ca parte a declarației.

    • anotherPet este inițializată cu o valoare anterioară y începerii buclei while . Va primi o valoare atribuită de utilizator, fie yn în buclă while .

    • petCount reprezintă numărul de animale cu caracteristicile de animale atribuite. I se va atribui o valoare calculată în afara buclei while și va fi incrementată de 1 fiecare while dată când se adaugă un animal nou la ourAnimals matrice.

    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 petCount domeniul la nivel de aplicație, în loc să faceți obiectul blocului de case "2": cod. Domeniul mai mare v-ar permite să accesați petCount de oriunde din aplicație. Dacă petCount a 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 din ourAnimals matrice, puteți reduce petCount cu 1. Î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 domeniul petCount la nivel de aplicație, chiar dacă nu îl utilizați în alt loc. Până la urmă, stabilirea petCount domeniului 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ți petCount mai pe larg în aplicație, puteți actualiza codul la un petCountnivel 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.

  5. Pe linia de cod de sub declarațiile variabilei, pentru a crea o buclă care iterează prin animalele din ourAnimals matrice, introduceți următorul cod:

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

    Acest cod ar trebui să arate familiar. Veți utiliza această for buclă de fiecare dată când iterați prin ourAnimals matrice.

  6. Î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 if angajament de fiecare dată când verificați dacă au fost atribuite caracteristici ale animalelor de companie.

  7. În interiorul blocului de cod al incrementării if pe care l-ați creat, pentru a incrementa petCount cu 1, introduceți următorul cod:

    petCount += 1;
    
  8. Luați un minut pentru a examina bucla finalizată for .

    Bucla finalizată for ar 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 ourAnimals verificarea matricei pentru datele atribuite. Atunci când găsește un animal cu date atribuite, acesta incrementează petCounter.

  9. În meniul Fișier Visual Studio Code, selectați Salvare.

  10. 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 build comanda din linia de comandă Terminal.

  11. Remediați toate erorile de compilare pe care le vedeți raportate înainte de a continua.

    Notă

    Deocamdată, puteți ignora mesajul Avertisment despre anotherPet atribuire, dar nu este utilizat niciodată. Veți adăuga cod care se utilizează anotherPet mai 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.

  12. Î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.

  1. Pe o linie de cod necompletată de sub bucla pe for care ați creat-o, pentru a vedea dacă petCount este mai mică decât maxPets, introduceți următorul cod:

    if (petCount < maxPets)
    {
    }
    
  2. Î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.

  3. Citiți un minut pentru a case "2": revizui ramura de cod a extrasului de switch cont.

    Î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;
    
  4. În meniul Fișier Visual Studio Code, selectați Salvare.

  5. Deschideți panoul Terminal integrat în Visual Studio Code și introduceți comanda Construiți programul.

  6. Remediați toate erorile de compilare pe care le vedeți raportate înainte de a continua.

    Din nou, puteți ignora mesajul Avertisment despre anotherPet atribuire, dar nu este utilizat niciodată. În următoarea activitate, veți începe să construiți bucla while care este utilizată pentru a introduce datele pentru unul sau mai multe animale de companie. Expresia pe while care o creați pentru buclă se va utiliza anotherPet ș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.

  7. În linia de comandă Terminal, introduceți comanda pentru a rula programul.

    dotnet run Introduceț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.

  8. În linia de comandă Terminal, introduceți 2

    Această valoare corespunde ramurii de case "2": cod.

  9. 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.

  10. În linia de comandă Terminal, apăsați pe Enter pentru a continua rularea aplicației.

  11. 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.

  1. În Editor cod, creați o linie de cod necompletată sub blocul de if (petCount < maxPets) cod.

  2. Pentru a începe procesul de creare a noii while bucle, introduceți următorul cod:

    while (anotherPet == "y" && petCount < maxPets)
    {
    }
    
  3. În meniul Fișier Visual Studio Code, selectați Salvare.

  4. Deschideți panoul Terminal integrat în Visual Studio Code și introduceți comanda Construiți programul.

  5. Observați că nu mai primiți mesajul avertisment despre anotherPet neutilizarea.

    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 .

  1. 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ă.

  2. 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;
    
  3. Pentru a verifica dacă petCount este mai mic decât maxPets, introduceți următorul cod:

    // check maxPet limit
    if (petCount < maxPets)
    {
    }
    
  4. În interiorul blocului de cod al declarației pe if care 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)");
    
  5. 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");
    
  6. Găsiți instrucțiunea care se break separă de case "2"; instrucțiunea case "3"; dvsswitch.

  7. Console.WriteLine() Observați instrucțiunile de Console.ReadLine() la sfârșitul codului nostrucase "2";.

    Acest cod afișează un mesaj utilizatorului, apoi întrerupe aplicația.

  8. Pentru a încadra Console.WriteLine() instrucțiunile și Console.ReadLine() într-o if instrucț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 petCount este incrementată în interiorul buclei while . Dacă petCount este egal cu maxPets, nu mai pot fi adăugate animale de companie la ourAnimals matrice. Ar trebui să anunțați utilizatorul când se întâmplă acest lucru.

  9. 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":
    
  10. Citiți un minut pentru a revizui codul în while buclă ș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();
    }
    
  11. În meniul Fișier Visual Studio Code, selectați Salvare.

  12. Deschideți panoul Terminal integrat în Visual Studio Code și introduceți comanda Construiți programul.

  13. 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.

  1. Dacă este necesar, deschideți panoul Terminal integrat visual Studio Code.

  2. În linia de comandă Terminal, introduceți run dotnet

  3. În linia de comandă Terminal, introduceți 2

  4. 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)
    
  5. În linia de comandă Terminal, introduceți n

  6. 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 while buclă 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.

  7. Î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)
    
  8. În linia de comandă Terminal, introduceți y

  9. 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 și maxPets. Știi că maxPets este atribuită o valoare de 8, dar cum rămâne cu petCount? Următoarele elemente vă ajută să evaluați logica pe care ați implementat-o:

    • Știi că petCount este 4 atunci când introduceți prima iterație a buclei while .

    • Știi că petCount este incrementat de fiecare dată când iterează bucla while .

    • Știți că valoarea atribuită petCount și modul în care sunt incrementate afectează modul în petCount care ourAnimals sunt stocate datele în matrice. Următoarele elemente explică relația dintre petCount datele stocate în ourAnimals:

      • Aplicația adaugă patru animale de companie la ourAnimals matrice atunci când creează datele eșantion.
      • Aplicația stochează date noi în ourAnimals matrice atunci când valoarea petCount este 4. 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 și 1 conține ID-ul de companie ourAnimals[3,0] pentru animal4. Prin urmare, atunci când petCount4 stocaț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ă, petCount este deja setată la 5.
    • 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" și petCount < maxPets.
      • Valoarea atribuită petCount va fi incrementată (când iterează bucla while ).
      • Valoarea atribuită petCount va fi 6 (după ce utilizatorul intră prima dată).

    Rețineți această analiză a logicii codului în timp ce continuați testarea aplicației.

  10. 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)
    
  11. În linia de comandă Terminal, introduceți y

    Când introduceți y a doua oară, petCount este incrementat la 7. Deci petCount , este încă mai mic decât maxPets

  12. În linia de comandă Terminal, introduceți y

    Când introduceți y a treia oară, petCount este incrementat la 8. Deci petCount , acum este egal cu maxPets

  13. Verificați dacă codul iese din while buclă 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 petCount ajungeți la o valoare egală cu maxPets. Continuați să răspundeți la "y" până când știți că petCount este egal cu maxPets, care are valoarea implicită .8

  14. În linia de comandă Terminal, apăsați pe Enter pentru a continua rularea aplicației.

  15. Ieșiți din aplicație, apoi închideți panoul Terminal.