Oefening: een lus bouwen en testen voor het invoeren van nieuwe huisdiergegevens

Voltooid

In deze oefening ontwikkelt u code waarmee de invoer van nieuwe ourAnimals matrixgegevens wordt bestuurd. U berekent de initiële waarden van uw lusbesturingsvariabelen en bouwt de lus die door de gebruiker opgegeven gegevens voor de dieren verzamelt. De gedetailleerde taken die u tijdens deze oefening hebt voltooid, zijn:

  1. Bereken petCount: schrijf code waarmee het aantal huisdieren in de ourAnimals matrix wordt geteld waaraan gegevens zijn toegewezen.
  2. Voorwaardelijke berichten: schrijf code om berichtuitvoer weer te geven wanneer petCount deze kleiner is dan maxPets.
  3. Outer loop: bouw een lusstructuur die wordt gebruikt voor het invoeren van nieuwe ourAnimals matrixgegevens.
  4. Afsluitcriteria: schrijf code die de afsluitvoorwaarde evalueert voor de lus 'enter new ourAnimals array data'.
  5. Verificatietest: voer verificatietests uit voor de code die u in deze oefening ontwikkelt.

Belangrijk

U moet de vorige oefening in deze module voltooien voordat u deze oefening start.

Het aantal huisdieren in de array ourAnimals tellen.

In deze taak stelt u de afsluitcriteria voor uw gegevensinvoerlus vast en maakt u een for lus die kan worden gebruikt om het aantal huisdieren in ourAnimals te tellen waarin gegevens zijn toegewezen.

  1. Zorg ervoor dat Visual Studio Code is geopend en dat uw Program.cs-bestand zichtbaar is in de editor.

  2. Zoek de switch(menuSelection) instructie en vind vervolgens de case "2": coderegel.

  3. Zoek de Console.WriteLine() instructie waarin het bericht 'binnenkort beschikbaar' wordt weergegeven en vervang deze door een lege coderegel.

  4. Voer op de lege coderegel die u hebt gemaakt de volgende code in om de anotherPet en petCount variabelen te declareren:

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

    Deze twee variabelen bepalen de iteratie van een while lus die wordt gebruikt om nieuwe huisdiergegevens in te voeren. U initialiseert beide variabelen als onderdeel van de declaratie.

    • anotherPet wordt geïnitialiseerd met een waarde van y vóór het begin van de while lus. Er zal een door de gebruiker toegewezen waarde worden ontvangen, ofwel y of n binnen de while lus.

    • petCount vertegenwoordigt het aantal dieren met toegewezen huisdierkenmerken. Er wordt een berekende waarde buiten de while lus toegewezen, en deze wordt binnen de 1 lus met while verhoogd telkens als er een nieuw dier wordt toegevoegd aan de ourAnimals array.

    Belangrijk

    Het bereik van uw variabelen moet altijd zo smal mogelijk zijn. In de toepassing Contoso Pets kunt u het bereik op toepassingsniveau bepalen petCount in plaats van het codeblok te case "2": verkennen. Met een bredere reikwijdte kunt u overal in de toepassing petCount benaderen. Als petCount op toepassingsniveau was ingesteld, kunt u het een waarde toewijzen wanneer u de voorbeeldgegevens maakt en programmatisch de waarde beheren in de rest van de toepassing. Als u bijvoorbeeld een huis voor een huisdier vindt en het huisdier uit de ourAnimals array verwijdert, kunt u petCount verminderen met 1. De vraag is, op welk niveau moet u een variabele bereiken wanneer u niet zeker weet of deze wordt gebruikt in andere onderdelen van uw toepassing? In dit geval is het verleidelijk om het bereik op toepassingsniveau te bepalen petCount , ook al gebruikt u het nergens anders. Door de reikwijdte van petCount op toepassingsniveau te bepalen, zorgt u ervoor dat het beschikbaar is als u besluit het elders te gebruiken. Misschien kunt u ook andere variabelen op toepassingsniveau bereiken. Op die manier zijn uw variabelen altijd binnen het bereik en toegankelijk. Waarom zijn er dus geen bereikvariabelen op toepassingsniveau wanneer u denkt dat ze later in de toepassing kunnen worden gebruikt? Bereikvariabelen op een hoger niveau dan nodig is, kunnen leiden tot problemen. Het bereik met verhoogde bevoegdheden vergroot de resourcevereisten van uw toepassing en kan uw toepassing blootstellen aan onnodige beveiligingsrisico's. Naarmate uw toepassingen groter en complexer worden, hebben ze meer resources nodig. Telefoons en computers wijzen geheugen toe voor deze resources wanneer ze binnen het bereik vallen. Naarmate uw toepassingen 'praktijk' worden, worden ze toegankelijker. Toepassingen zijn vaak toegankelijk vanuit de cloud of andere toepassingen. Deze problemen verergerend, blijven toepassingen vaak actief wanneer ze niet worden gebruikt. Het is belangrijk om de resourcevereisten van een toepassing onder controle te houden en de voetafdruk van de beveiliging zo klein mogelijk te houden. Hoewel de besturingssystemen van vandaag een uitstekende taak hebben om resources te beheren en toepassingen te beveiligen, is het nog steeds raadzaam om uw variabelen te beperken tot het niveau waarop ze daadwerkelijk nodig zijn. Als u in de Contoso Pets-app besluit om op bredere schaal gebruik te maken van petCount binnen de app, kunt u uw code bijwerken naar een hoger niveau petCount. Vergeet niet om uw variabelen zo beperkt mogelijk te houden en het bereik alleen te vergroten wanneer dit nodig is.

  5. Gebruik op de coderegel onder uw variabeledeclaraties de volgende code om een lus te maken die door de dieren in de ourAnimals array loopt:

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

    Deze code moet er bekend uitzien. U gebruikt deze for lus telkens wanneer u de ourAnimals matrix doorloopt.

  6. Voer in het codeblok van onze for lus de volgende code in om te controleren of gegevens van huisdierkenmerken aan een dier zijn toegewezen:

    if (ourAnimals[i, 0] != "ID #: ")
    {
    }
    

    Nogmaals, deze code moet er bekend uitzien. U gebruikt deze if instructie telkens wanneer u controleert of er kenmerken van huisdieren zijn toegewezen.

  7. Voer de volgende code in in het codeblok van if dat je hebt gemaakt om petCount met 1 te verhogen:

    petCount += 1;
    
  8. Neem even de tijd om de voltooide for lus te bekijken.

    De voltooide for lus moet eruitzien als de volgende code:

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

    Met deze code wordt de ourAnimals matrixcontrole voor toegewezen gegevens doorlopen. Wanneer een dier wordt gevonden waaraan gegevens zijn toegewezen, wordt petCounter verhoogd.

  9. Selecteer Opslaan in het menu Visual Studio Code File.

  10. Open het deelvenster Integrated Terminal in Visual Studio Code en voer de opdracht in om uw programma te bouwen.

    Als u de integratieterminal wilt openen vanuit de VERKENNER-weergave, klikt u met de rechtermuisknop op Starter en selecteert u Openen in geïntegreerde terminal. U kunt ook het menu Beeld of Terminal gebruiken om het deelvenster Geïntegreerde terminal te openen.

    Voer de opdracht uit de dotnet build Terminal-opdrachtprompt in om uw programma te bouwen.

  11. Los eventuele buildfouten op die u hebt gerapporteerd voordat u doorgaat.

    Opmerking

    Voorlopig kunt u het waarschuwingsbericht over anotherPet negeren dat is toegewezen maar niet gebruikt. U voegt code toe die later in deze oefening wordt gebruikt anotherPet .

    Als u buildfouten hebt, moet u er rekening mee houden dat de build-fout- en waarschuwingsberichten u vertellen wat het probleem is en waar u het kunt vinden. Als u uw code bijwerkt, moet u de wijzigingen opslaan voordat u de code opnieuw bouwt.

  12. Sluit het venster Terminal.

Bericht weergeven wanneer petCount kleiner is dan maxPets

In deze taak controleert u of petCount kleiner is dan maxPets en als dat het geval is, geeft u een bericht weer aan de gebruiker.

  1. Voer op een lege coderegel onder de for lus die u hebt gemaakt de volgende code in om te zien of petCount deze kleiner is dan maxPets:

    if (petCount < maxPets)
    {
    }
    
  2. Voer in het codeblok van de if instructie de volgende code in om een bericht weer te geven aan de gebruiker:

    Console.WriteLine($"We currently have {petCount} pets that need homes. We can manage {(maxPets - petCount)} more.");
    

    Toepassingsgebruikers staan op het punt om huisdierkenmerken in te voeren. Dit bericht biedt belangrijke context.

  3. Neem even de tijd om de case "2": code branch van uw switch verklaring te bekijken.

    Op dit moment moet uw case "2": codebranch eruitzien als de volgende code:

    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. Selecteer Opslaan in het menu Visual Studio Code File.

  5. Open het deelvenster Integrated Terminal in Visual Studio Code en voer de opdracht in om uw programma te bouwen.

  6. Los eventuele buildfouten op die u hebt gerapporteerd voordat u doorgaat.

    Nogmaals, u kunt het waarschuwingsbericht over anotherPet dat toegewezen maar nooit gebruikt wordt, negeren. In de volgende taak begint u met het bouwen van de while lus die wordt gebruikt om de gegevens voor een of meer huisdieren in te voeren. De expressie die u voor de while lus instelt, zal gebruikmaken van anotherPet, waardoor deze waarschuwing verdwijnt.

    Waarschuwingsberichten zijn dingen waarover u zich zorgen moet maken, maar ze verhinderen niet dat u uw programma uitvoert.

  7. Voer bij de Terminal-opdrachtprompt de opdracht in om het programma uit te voeren.

    Voer de dotnet run opdracht in de Terminal-opdrachtprompt in om de programmacode uit te voeren.

    Zolang uw code geen runtimefout genereert, moet het hoofdmenu van de app nu worden weergegeven in het terminalvenster.

  8. Voer bij de Terminal-opdrachtprompt 2 in

    Deze waarde komt overeen met uw case "2": codebranch.

  9. Controleer of het volgende bericht wordt weergegeven in de terminal.

    We currently have 4 pets that need homes. We can manage 4 more.
    Press the Enter key to continue.
    

    Als het verwachte bericht niet wordt weergegeven, controleert u de code om het probleem te identificeren en op te lossen. Sla uw wijzigingen op, bouw de app opnieuw en voer deze opnieuw uit. Zorg ervoor dat code werkt zoals verwacht voordat u doorgaat.

  10. Druk bij de Terminal-opdrachtprompt op Enter om door te gaan met het uitvoeren van uw toepassing.

  11. Sluit de toepassing en sluit vervolgens het terminalpaneel.

Bouw een lusstructuur die wordt gebruikt voor het invoeren van nieuwe onzeAnimals-matrixgegevens

In deze taak maakt u een while lus die blijft herhalen zolang deze anotherPet gelijk is aan y en petCount kleiner is dan maxPets.

  1. Maak in de code-editor een lege coderegel onder het if (petCount < maxPets) codeblok.

  2. Voer de volgende code in om het proces van het maken van uw nieuwe while lus te starten:

    while (anotherPet == "y" && petCount < maxPets)
    {
    }
    
  3. Selecteer Opslaan in het menu Visual Studio Code File.

  4. Open het deelvenster Integrated Terminal in Visual Studio Code en voer de opdracht in om uw programma te bouwen.

  5. U merkt dat u het waarschuwingsbericht niet meer ontvangt dat anotherPet niet wordt gebruikt.

    Als er buildfouten of waarschuwingen zijn gerapporteerd, lost u de problemen op voordat u doorgaat.

Afsluitvoorwaarde controleren op nieuwe huisdierenlus

In deze taak werkt u het while (anotherPet == "y" && petCount < maxPets) codeblok bij. De nieuwe code verhoogt petCount en controleert vervolgens of petCount kleiner is dan maxPets. Als petCount dit minder is dan maxPets, vraagt u de gebruiker of hij of zij gegevens voor een ander huisdier wil invoeren en controleert u of het antwoord is y of n. Na het while (anotherPet == "y" && petCount < maxPets) codeblok controleert u de waarde van petCount. Als petCount dit gelijk is aan maxPets, informeert u de gebruiker dat er geen huisdieren meer kunnen worden toegevoegd.

Opmerking

De code die wordt gebruikt om huisdiergegevens in te voeren, wordt in de volgende oefening ontwikkeld. Voor nu wordt petCount verhoogd alsof gegevens worden ingevoerd en opgeslagen in de ourAnimals array. Hiermee kunt u de codelogica die aan de while lus gekoppeld is, afronden.

  1. Maak een lege coderegel in het codeblok van de while (anotherPet == "y" && petCount < maxPets) lus die u in de vorige taak hebt gemaakt.

  2. Voer de volgende code in om te verhogen petCount:

    // increment petCount (the array is zero-based, so we increment the counter after adding to the array)
    petCount = petCount + 1;
    
  3. Voer de volgende code in om te controleren of petCount deze kleiner is dan maxPets:

    // check maxPet limit
    if (petCount < maxPets)
    {
    }
    
  4. Voer in het codeblok van de if instructie die u hebt gemaakt de gebruiker te vragen of ze een ander huisdier willen toevoegen de volgende code in:

    // another pet?
    Console.WriteLine("Do you want to enter info for another pet (y/n)");
    
  5. Voer onder het WriteLine() bericht dat u hebt ingevoerd de volgende code in om het antwoord van de gebruiker te lezen en ervoor te zorgen dat de gebruiker 'y' of 'n' heeft ingevoerd:

    do
    {
        readResult = Console.ReadLine();
        if (readResult != null)
        {
            anotherPet = readResult.ToLower();
        }
    
    } while (anotherPet != "y" && anotherPet != "n");
    
  6. Zoek de break instructie die case "2"; van case "3"; scheidt in uw switch instructie.

  7. Let op de Console.WriteLine() en Console.ReadLine() instructies aan het einde van onze case "2"; code.

    Met deze code wordt een bericht aan de gebruiker weergegeven en wordt de toepassing onderbroken.

  8. Als u de Console.WriteLine() en Console.ReadLine() instructies in een if instructie wilt insluiten, werkt u uw code als volgt bij:

    
    if (petCount >= maxPets)
    {
        Console.WriteLine("Press the Enter key to continue.");
        readResult = Console.ReadLine();
    }
    
    break;
    
    case "3":
    

    De waarde van petCount wordt in de while lus verhoogd. Als petCount het gelijk is aan maxPets, kunnen er geen huisdieren meer worden toegevoegd aan de ourAnimals matrix. U moet de gebruiker laten weten wanneer dit gebeurt.

  9. Als u de gebruiker wilt informeren dat Contoso Pets de capaciteit heeft bereikt, werkt u uw code als volgt bij:

    
        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. Neem even de tijd om de code in uw while lus te bekijken en het gebruikersbericht dat u hebt gemaakt.

    Uw while (anotherPet == "y" && petCount < maxPets) lus en code die het gebruikersbericht weergeeft, moeten eruitzien als de volgende code:

    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. Selecteer Opslaan in het menu Visual Studio Code File.

  12. Open het deelvenster Integrated Terminal in Visual Studio Code en voer de opdracht in om uw programma te bouwen.

  13. Los eventuele Build-fouten of -waarschuwingen op die worden gerapporteerd voordat u doorgaat.

Controleer uw werk

In deze taak voert u onze toepassing uit vanuit de geïntegreerde terminal en controleert u of de lus- en vertakkingslogica die u hebt gemaakt, werkt zoals verwacht.

  1. Open zo nodig het geïntegreerde terminalpaneel van Visual Studio Code.

  2. Voer bij de Terminal-opdrachtprompt dotnet run in.

  3. Voer bij de Terminal-opdrachtprompt 2 in

  4. Controleer of u de volgende berichten ziet:

    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. Voer n in bij de terminalopdrachtprompt

  6. Controleer of de code de lus verlaat voor het invoeren van nieuwe huisdieren wanneer u 'n' hebt ingevoerd.

    Als uw codelogica werkt zoals verwacht, ziet u het hoofdmenu dat wordt weergegeven in de Terminal.

    Als de code de lus niet verlaat wanneer verwacht, drukt u op Ctrl+C in de terminal om de uitvoering af te dwingen om te stoppen. U moet uw code handmatig doorlopen en de waarden van de afsluitcriteriavariabelen traceren. Werk uw code indien nodig bij om ervoor te zorgen dat u de while lus afsluit wanneer de gebruiker 'n' invoert. Sla uw wijzigingen op, bouw uw programma opnieuw en voer de verificatietest uit om op dit moment terug te komen.

  7. Voer bij de Terminal-opdrachtprompt 2 in

    Nogmaals ziet u de volgende berichten die worden weergegeven:

    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. Voer bij de Terminal-opdrachtprompt y in

  9. Neem even de tijd om te bedenken hoe petCount wordt gebruikt in uw code.

    U moet uw codelogica begrijpen voordat u uw code kunt valideren.

    In dit geval is uw codelogica afhankelijk van de relatie tussen petCount en maxPets. Weet je dat maxPets er een waarde van 8is toegewezen, maar hoe zit het met petCount? De volgende items helpen bij het evalueren van de logica die u hebt geïmplementeerd:

    • U weet dat petCount4 wanneer u de eerste iteratie van de while lus invoert.

    • U weet dat de waarde van petCount telkens wordt verhoogd wanneer de while lus wordt geïtereerd.

    • U weet dat de aan petCount toegewezen waarde en de manier waarop petCount wordt verhoogd, van invloed zijn op hoe gegevens worden opgeslagen in de ourAnimals array. In de volgende items wordt de relatie uitgelegd tussen petCount en de gegevens die zijn opgeslagen in ourAnimals:

      • De toepassing voegt vier huisdieren toe aan de ourAnimals matrix wanneer de voorbeeldgegevens worden gemaakt.
      • De toepassing slaat nieuwe gegevens op in de ourAnimals matrix wanneer de waarde petCount is 4. Dit is geen bug. De code is logisch wanneer u zich herinnert dat matrixelementen op nul zijn gebaseerd. Bevat bijvoorbeeld ourAnimals[0,0] het huisdier-id voor dier 1 en ourAnimals[3,0] bevat het huisdier-id voor dier 4. Daarom, wanneer petCount4 bent, slaat u gegevens op voor het vijfde huisdier.
      • De toepassing slaat huisdiergegevens op in de matrix voordat deze wordt verhoogd petCount.
      • De applicatie verhoogt petCount voordat de gebruiker wordt gevraagd of hij een ander huisdier wil toevoegen.
      • Wanneer in de toepassing de prompt Wilt u voor het eerst gegevens invoeren voor een ander huisdier (y/n) wordt weergegeven, petCount is dit al ingesteld 5op .
    • Als de gebruiker y invoert bij de eerste vraag Wilt u informatie invoeren voor een ander huisdier (y/n), weet u dat:

      • De while (anotherPet == "y" && petCount < maxPets) lus wordt herhaald. Je weet dat de lus zal itereren omdat anotherPet == "y" en petCount < maxPets.
      • De waarde waaraan is toegewezen petCount , wordt verhoogd (wanneer de while lus wordt herhaald).
      • De waarde waaraan is toegewezen petCount , is 6 (nadat de gebruiker de eerste keer y invoert).

    Houd deze analyse van de codelogica in gedachten terwijl u de toepassing blijft testen.

  10. Merk op dat het Terminal-panel wordt bijgewerkt met hetzelfde bericht "een ander huisdier?", maar uw code toont geen bijgewerkte petCount.

    Het Terminal-venster moet nu de volgende uitvoer tonen:

    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. Voer bij de Terminal-opdrachtprompt y in

    Wanneer u een tweede keer invoert y , petCount wordt verhoogd naar 7. Dus petCount is nog steeds kleiner dan maxPets

  12. Voer bij de Terminal-opdrachtprompt y in

    Wanneer u een derde keer y invoert, wordt petCount verhoogd naar 8. Dus petCount is nu gelijk aan maxPets

  13. Controleer of uw code de while lus verlaat wanneer u voor de derde keer y invoert.

    Het Terminal-venster moet nu de volgende uitvoer tonen:

    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.
    

    Als de code de lus niet verlaat wanneer verwacht, doorloopt u de code handmatig en traceert u de waarden van de afsluitcriteriavariabelen. Werk uw code bij om ervoor te zorgen dat u de lus afsluit wanneer petCount een waarde gelijk is aan maxPets. Blijf "y" antwoorden totdat u zeker weet dat petCount gelijk is aan maxPets, wat een standaardwaarde van 8 heeft.

  14. Druk bij de Terminal-opdrachtprompt op Enter om door te gaan met het uitvoeren van uw toepassing.

  15. Sluit de toepassing en sluit vervolgens het terminalpaneel.