Oefening: een lus bouwen en testen voor het invoeren van nieuwe huisdiergegevens
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:
- Bereken petCount: schrijf code waarmee het aantal huisdieren in de
ourAnimalsmatrix wordt geteld waaraan gegevens zijn toegewezen. - Voorwaardelijke berichten: schrijf code om berichtuitvoer weer te geven wanneer
petCountdeze kleiner is danmaxPets. - Outer loop: bouw een lusstructuur die wordt gebruikt voor het invoeren van nieuwe
ourAnimalsmatrixgegevens. - Afsluitcriteria: schrijf code die de afsluitvoorwaarde evalueert voor de lus 'enter new ourAnimals array data'.
- 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.
Zorg ervoor dat Visual Studio Code is geopend en dat uw Program.cs-bestand zichtbaar is in de editor.
Zoek de
switch(menuSelection)instructie en vind vervolgens decase "2":coderegel.Zoek de
Console.WriteLine()instructie waarin het bericht 'binnenkort beschikbaar' wordt weergegeven en vervang deze door een lege coderegel.Voer op de lege coderegel die u hebt gemaakt de volgende code in om de
anotherPetenpetCountvariabelen te declareren:string anotherPet = "y"; int petCount = 0;Deze twee variabelen bepalen de iteratie van een
whilelus die wordt gebruikt om nieuwe huisdiergegevens in te voeren. U initialiseert beide variabelen als onderdeel van de declaratie.anotherPetwordt geïnitialiseerd met een waarde vanyvóór het begin van dewhilelus. Er zal een door de gebruiker toegewezen waarde worden ontvangen, ofwelyofnbinnen dewhilelus.petCountvertegenwoordigt het aantal dieren met toegewezen huisdierkenmerken. Er wordt een berekende waarde buiten dewhilelus toegewezen, en deze wordt binnen de1lus metwhileverhoogd telkens als er een nieuw dier wordt toegevoegd aan deourAnimalsarray.
Belangrijk
Het bereik van uw variabelen moet altijd zo smal mogelijk zijn. In de toepassing Contoso Pets kunt u het bereik op toepassingsniveau bepalen
petCountin plaats van het codeblok tecase "2":verkennen. Met een bredere reikwijdte kunt u overal in de toepassingpetCountbenaderen. AlspetCountop 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 deourAnimalsarray verwijdert, kunt upetCountverminderen met1. 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 bepalenpetCount, ook al gebruikt u het nergens anders. Door de reikwijdte vanpetCountop 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 vanpetCountbinnen de app, kunt u uw code bijwerken naar een hoger niveaupetCount. Vergeet niet om uw variabelen zo beperkt mogelijk te houden en het bereik alleen te vergroten wanneer dit nodig is.Gebruik op de coderegel onder uw variabeledeclaraties de volgende code om een lus te maken die door de dieren in de
ourAnimalsarray loopt:for (int i = 0; i < maxPets; i++) { }Deze code moet er bekend uitzien. U gebruikt deze
forlus telkens wanneer u deourAnimalsmatrix doorloopt.Voer in het codeblok van onze
forlus 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
ifinstructie telkens wanneer u controleert of er kenmerken van huisdieren zijn toegewezen.Voer de volgende code in in het codeblok van
ifdat je hebt gemaakt ompetCountmet 1 te verhogen:petCount += 1;Neem even de tijd om de voltooide
forlus te bekijken.De voltooide
forlus 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
ourAnimalsmatrixcontrole voor toegewezen gegevens doorlopen. Wanneer een dier wordt gevonden waaraan gegevens zijn toegewezen, wordtpetCounterverhoogd.Selecteer Opslaan in het menu Visual Studio Code File.
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 buildTerminal-opdrachtprompt in om uw programma te bouwen.Los eventuele buildfouten op die u hebt gerapporteerd voordat u doorgaat.
Opmerking
Voorlopig kunt u het waarschuwingsbericht over
anotherPetnegeren dat is toegewezen maar niet gebruikt. U voegt code toe die later in deze oefening wordt gebruiktanotherPet.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.
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.
Voer op een lege coderegel onder de
forlus die u hebt gemaakt de volgende code in om te zien ofpetCountdeze kleiner is danmaxPets:if (petCount < maxPets) { }Voer in het codeblok van de
ifinstructie 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.
Neem even de tijd om de
case "2":code branch van uwswitchverklaring 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;Selecteer Opslaan in het menu Visual Studio Code File.
Open het deelvenster Integrated Terminal in Visual Studio Code en voer de opdracht in om uw programma te bouwen.
Los eventuele buildfouten op die u hebt gerapporteerd voordat u doorgaat.
Nogmaals, u kunt het waarschuwingsbericht over
anotherPetdat toegewezen maar nooit gebruikt wordt, negeren. In de volgende taak begint u met het bouwen van dewhilelus die wordt gebruikt om de gegevens voor een of meer huisdieren in te voeren. De expressie die u voor dewhilelus instelt, zal gebruikmaken vananotherPet, waardoor deze waarschuwing verdwijnt.Waarschuwingsberichten zijn dingen waarover u zich zorgen moet maken, maar ze verhinderen niet dat u uw programma uitvoert.
Voer bij de Terminal-opdrachtprompt de opdracht in om het programma uit te voeren.
Voer de
dotnet runopdracht 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.
Voer bij de Terminal-opdrachtprompt 2 in
Deze waarde komt overeen met uw
case "2":codebranch.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.
Druk bij de Terminal-opdrachtprompt op Enter om door te gaan met het uitvoeren van uw toepassing.
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.
Maak in de code-editor een lege coderegel onder het
if (petCount < maxPets)codeblok.Voer de volgende code in om het proces van het maken van uw nieuwe
whilelus te starten:while (anotherPet == "y" && petCount < maxPets) { }Selecteer Opslaan in het menu Visual Studio Code File.
Open het deelvenster Integrated Terminal in Visual Studio Code en voer de opdracht in om uw programma te bouwen.
U merkt dat u het waarschuwingsbericht niet meer ontvangt dat
anotherPetniet 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.
Maak een lege coderegel in het codeblok van de
while (anotherPet == "y" && petCount < maxPets)lus die u in de vorige taak hebt gemaakt.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;Voer de volgende code in om te controleren of
petCountdeze kleiner is danmaxPets:// check maxPet limit if (petCount < maxPets) { }Voer in het codeblok van de
ifinstructie 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)");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");Zoek de
breakinstructie diecase "2";vancase "3";scheidt in uwswitchinstructie.Let op de
Console.WriteLine()enConsole.ReadLine()instructies aan het einde van onzecase "2";code.Met deze code wordt een bericht aan de gebruiker weergegeven en wordt de toepassing onderbroken.
Als u de
Console.WriteLine()enConsole.ReadLine()instructies in eenifinstructie 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
petCountwordt in dewhilelus verhoogd. AlspetCounthet gelijk is aanmaxPets, kunnen er geen huisdieren meer worden toegevoegd aan deourAnimalsmatrix. U moet de gebruiker laten weten wanneer dit gebeurt.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":Neem even de tijd om de code in uw
whilelus 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(); }Selecteer Opslaan in het menu Visual Studio Code File.
Open het deelvenster Integrated Terminal in Visual Studio Code en voer de opdracht in om uw programma te bouwen.
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.
Open zo nodig het geïntegreerde terminalpaneel van Visual Studio Code.
Voer bij de Terminal-opdrachtprompt dotnet run in.
Voer bij de Terminal-opdrachtprompt 2 in
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)Voer n in bij de terminalopdrachtprompt
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
whilelus 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.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)Voer bij de Terminal-opdrachtprompt y in
Neem even de tijd om te bedenken hoe
petCountwordt 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
petCountenmaxPets. Weet je datmaxPetser een waarde van8is toegewezen, maar hoe zit het metpetCount? De volgende items helpen bij het evalueren van de logica die u hebt geïmplementeerd:U weet dat
petCount4wanneer u de eerste iteratie van dewhilelus invoert.U weet dat de waarde van
petCounttelkens wordt verhoogd wanneer dewhilelus wordt geïtereerd.U weet dat de aan
petCounttoegewezen waarde en de manier waaroppetCountwordt verhoogd, van invloed zijn op hoe gegevens worden opgeslagen in deourAnimalsarray. In de volgende items wordt de relatie uitgelegd tussenpetCounten de gegevens die zijn opgeslagen inourAnimals:- De toepassing voegt vier huisdieren toe aan de
ourAnimalsmatrix wanneer de voorbeeldgegevens worden gemaakt. - De toepassing slaat nieuwe gegevens op in de
ourAnimalsmatrix wanneer de waardepetCountis4. Dit is geen bug. De code is logisch wanneer u zich herinnert dat matrixelementen op nul zijn gebaseerd. Bevat bijvoorbeeldourAnimals[0,0]het huisdier-id voor dier1enourAnimals[3,0]bevat het huisdier-id voor dier4. Daarom, wanneerpetCount4bent, slaat u gegevens op voor het vijfde huisdier. - De toepassing slaat huisdiergegevens op in de matrix voordat deze wordt verhoogd
petCount. - De applicatie verhoogt
petCountvoordat 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,
petCountis dit al ingesteld5op .
- De toepassing voegt vier huisdieren toe aan de
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 omdatanotherPet == "y"enpetCount < maxPets. - De waarde waaraan is toegewezen
petCount, wordt verhoogd (wanneer dewhilelus wordt herhaald). - De waarde waaraan is toegewezen
petCount, is6(nadat de gebruiker de eerste keer y invoert).
- De
Houd deze analyse van de codelogica in gedachten terwijl u de toepassing blijft testen.
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)Voer bij de Terminal-opdrachtprompt y in
Wanneer u een tweede keer invoert
y,petCountwordt verhoogd naar7. DuspetCountis nog steeds kleiner danmaxPetsVoer bij de Terminal-opdrachtprompt y in
Wanneer u een derde keer
yinvoert, wordtpetCountverhoogd naar8. DuspetCountis nu gelijk aanmaxPetsControleer of uw code de
whilelus 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
petCounteen waarde gelijk is aanmaxPets. Blijf "y" antwoorden totdat u zeker weet datpetCountgelijk is aanmaxPets, wat een standaardwaarde van8heeft.Druk bij de Terminal-opdrachtprompt op Enter om door te gaan met het uitvoeren van uw toepassing.
Sluit de toepassing en sluit vervolgens het terminalpaneel.