Exercice - Générer et tester une boucle pour entrer de nouvelles données d’animal de compagnie
Dans cet exercice, vous développez du code qui contrôle l’entrée de nouvelles ourAnimals données de tableau. Vous calculez les valeurs initiales de vos variables de contrôle de boucle et construisez la boucle qui collecte les données spécifiées par l’utilisateur pour les animaux. Les tâches détaillées que vous effectuez pendant cet exercice sont les suivantes :
- Calculer petCount : écrivez du code qui compte le nombre d’animaux de compagnie dans le
ourAnimalstableau qui ont attribué des données. - Messages conditionnels : écrivez du code pour afficher la sortie du message lorsque
petCountest inférieur àmaxPets. - Boucle externe : créez une structure de boucle qui sera utilisée pour entrer de nouvelles
ourAnimalsdonnées de tableau. - Critères de sortie : écrivez du code qui évalue la condition de sortie pour la boucle « Entrer de nouvelles données de tableau OurAnimals ».
- Test de vérification : effectuez des tests de vérification pour le code que vous développez dans cet exercice.
Important
Vous devez effectuer l’exercice précédent dans ce module avant de commencer cet exercice.
Compter le nombre d’animaux de compagnie dans le tableau ourAnimals
Dans cette tâche, vous établissez les critères de sortie de votre boucle de saisie de données et vous créez une for boucle qui peut être utilisée pour compter le nombre d’animaux de compagnie dans ourAnimals qui ont des données assignées.
Vérifiez que Visual Studio Code est ouvert et que votre fichier Program.cs est visible dans l’éditeur.
Recherchez l’instruction
switch(menuSelection), puis trouvez la ligne de codecase "2":.Recherchez l’instruction
Console.WriteLine()qui affiche le message « bientôt disponible », puis remplacez-le par une ligne de code vide.Sur la ligne de code vide que vous avez créée, pour déclarer les variables
anotherPetetpetCount, entrez le code suivant :string anotherPet = "y"; int petCount = 0;Ces deux variables contrôlent l’itération d’une
whileboucle utilisée pour entrer de nouvelles données d’animal de compagnie. Vous initialisez les deux variables dans le cadre de la déclaration.anotherPetest initialisé avec une valeuryavant le début de la bouclewhile. Il recevra une valeur attribuée par l'utilisateur, soity, soitnà l'intérieur de la bouclewhile.petCountreprésente le nombre d’animaux avec des caractéristiques d’animal de compagnie attribuées. Elle se verra attribuer une valeur calculée en dehors de votrewhileboucle et elle sera incrémentée à1à l'intérieur de lawhileboucle à chaque ajout d’un nouvel animal au tableauourAnimals.
Important
L’étendue de vos variables doit toujours être aussi étroite que possible. Dans l’application Contoso Pets, vous pouvez définir
petCountau niveau de l’application au lieu de définir le bloc de codecase "2":. La plus grande étendue vous permet d’accéderpetCountà partir de n’importe où dans l’application. SipetCounta été étendu au niveau de l'application, vous pouvez lui attribuer une valeur lorsque vous créez les exemples de données et gérer par programmation sa valeur tout au long du reste de l'application. Par exemple, lorsque vous trouvez une maison pour un animal de compagnie et que vous retirez l’animal de laourAnimalsmatrice, vous pouvez réduirepetCountpar1. La question est : à quel niveau devez-vous étendre une variable lorsque vous ne savez pas si elle sera utilisée dans d’autres parties de votre application ? Dans ce cas, il est tentant d’étendrepetCountau niveau de l’application même si vous ne l’utilisez pas ailleurs. Après tout, délimiterpetCountau niveau de l’application garantit qu’elle est disponible si vous décidez de l’utiliser ailleurs. Vous pouvez peut-être également étendre d’autres variables au niveau de l’application. De cette façon, vos variables sont toujours visibles et accessibles. Pourquoi ne pas étendre les variables au niveau de l’application quand vous pensez qu’elles peuvent être utilisées ultérieurement dans l’application ? Définir la portée des variables à un niveau supérieur au nécessaire peut entraîner des problèmes. L’étendue élevée augmente les besoins en ressources de votre application et peut exposer votre application à des risques de sécurité inutiles. À mesure que vos applications augmentent et sont plus complexes, elles nécessitent davantage de ressources. Les téléphones et les ordinateurs allouent de la mémoire pour ces ressources au moment où elles sont dans leur portée. À mesure que vos applications deviennent plus « réelles », elles deviennent plus accessibles. Les applications sont souvent accessibles à partir du cloud ou d’autres applications. Pour aggraver ces problèmes, les applications sont souvent laissées tourner lorsqu’elles ne sont pas utilisées. Il est important de garder les exigences de ressources d’une application sous contrôle et l’empreinte de sécurité aussi petite que possible. Bien que les systèmes d’exploitation actuels fassent un excellent travail de gestion des ressources et de sécurisation des applications, il est toujours recommandé de garder vos variables étendues au niveau où elles sont réellement nécessaires. Dans votre application Contoso Pets, si vous décidez d’utiliserpetCountplus largement dans l’application, vous pouvez mettre à jour votre code pour qu’il s’appliquepetCountà un niveau supérieur. N’oubliez pas de garder vos variables délimitées aussi étroitement que possible et d’augmenter leur étendue uniquement lorsqu’elles deviennent nécessaires.Sur la ligne de code juste en dessous de vos déclarations de variables, pour créer une boucle qui itère à travers les animaux dans le tableau d'animaux
ourAnimals, entrez le code suivant :for (int i = 0; i < maxPets; i++) { }Ce code doit être familier. Vous utiliserez cette
forboucle chaque fois que vous effectuez une itération dans leourAnimalstableau.Dans le bloc de code de notre
forboucle, pour vérifier si les données des caractéristiques des animaux ont été affectées à un animal, entrez le code suivant :if (ourAnimals[i, 0] != "ID #: ") { }Là encore, ce code doit être familier. Vous utiliserez cette
ifinstruction chaque fois que vous vérifiez si des caractéristiques d’animal ont été attribuées.Dans le bloc de code du
ifque vous avez créé, pour incrémenterpetCountde 1, entrez le code suivant :petCount += 1;Prenez une minute pour examiner votre boucle terminée
for.Votre boucle terminée
fordoit ressembler au code suivant :for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { petCount += 1; } }Ce code effectue une boucle à travers le tableau
ourAnimalsen vérifiant les données assignées. Lorsqu’il trouve un animal avec des données attribuées, il incrémentepetCounter.Dans le menu Fichier de Visual Studio Code, sélectionnez Enregistrer.
Ouvrez le panneau Terminal intégré dans Visual Studio Code et entrez la commande pour générer votre programme.
Pour ouvrir le terminal d’intégration à partir de l’affichage Explorateur, cliquez avec le bouton droit sur Starter, puis sélectionnez Ouvrir dans le terminal intégré. Vous pouvez également utiliser le menu Affichage ou Terminal pour ouvrir le panneau Terminal intégré.
Pour générer votre programme, entrez la commande
dotnet builddepuis le terminal.Corrigez les erreurs de build que vous voyez signalées avant de continuer.
Remarque
Pour l'instant, vous pouvez ignorer le message d'avertissement concernant
anotherPetqui est attribué mais jamais utilisé. Vous allez ajouter du code qui utiliseanotherPetplus loin dans cet exercice.Si vous avez des erreurs de compilation, n'oubliez pas que les messages d'erreur et d'avertissement liés à la compilation vous indiquent quel est le problème et où vous pouvez le trouver. Si vous mettez à jour votre code, n’oubliez pas d’enregistrer vos modifications avant de reconstruire.
Fermez le panneau du Terminal.
Afficher la sortie du message lorsque petCount est inférieur à maxPets
Dans cette tâche, vous vérifiez si petCount est inférieur à maxPets et, si tel est le cas, vous affichez un message pour l'utilisateur.
Sur une ligne de code vide sous la boucle
forque vous avez créée, pour vérifier sipetCountest inférieur àmaxPets, entrez le code suivant :if (petCount < maxPets) { }Dans le bloc de code de l’instruction
if, pour afficher un message à l’utilisateur, entrez le code suivant :Console.WriteLine($"We currently have {petCount} pets that need homes. We can manage {(maxPets - petCount)} more.");Les utilisateurs d’applications sont sur le point d’entrer des caractéristiques d’animal de compagnie. Ce message fournit un contexte important.
Prenez une minute pour passer en revue la
case "2":branche de code de votreswitchinstruction.À ce stade, votre
case "2":branche de code doit ressembler au code suivant :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;Dans le menu Fichier de Visual Studio Code, sélectionnez Enregistrer.
Ouvrez le panneau Terminal intégré dans Visual Studio Code et entrez la commande pour générer votre programme.
Corrigez les erreurs de build que vous voyez signalées avant de continuer.
Là encore, vous pouvez ignorer le message d’avertissement concernant
anotherPetqui est affecté mais jamais utilisé. Dans la tâche suivante, vous allez commencer à créer lawhileboucle utilisée pour entrer les données d’un ou plusieurs animaux domestiques. L’expression que vous créez pour lawhileboucle utiliseanotherPetet ce message d’avertissement disparaît.N’oubliez pas que les messages d’avertissement sont des éléments dont vous devez vous soucier, mais ils ne vous empêcheront pas d’exécuter votre programme.
À l’invite de commandes du terminal, entrez la commande pour exécuter votre programme.
Entrez la
dotnet runcommande à l’invite de commandes terminal pour exécuter votre code de programme.Tant que votre code ne génère pas d’erreur d’exécution, le menu principal de l’application doit maintenant s’afficher dans le panneau Terminal.
À l’invite de commandes terminal, entrez 2
Cette valeur correspond à votre
case "2":branche de code.Vérifiez que le message suivant s’affiche dans le terminal.
We currently have 4 pets that need homes. We can manage 4 more. Press the Enter key to continue.Si vous ne voyez pas le message attendu affiché, passez en revue votre code pour identifier et résoudre le problème. Enregistrez vos modifications, régénérez et réexécutez l’application. Assurez-vous que le code fonctionne comme prévu avant de continuer.
À l’invite de commandes terminal, appuyez sur Entrée pour continuer à exécuter votre application.
Quittez l’application, puis fermez le panneau Terminal.
Créer une structure de boucle qui sera utilisée pour entrer de nouvelles données dans notre tableau d'animaux.
Dans cette tâche, vous créez une while boucle qui continue d'itérer tant que anotherPet est égal(e) à y et que petCount est inférieur(e) à maxPets.
Dans l’Éditeur de code, créez une ligne de code vide sous votre
if (petCount < maxPets)bloc de code.Pour commencer le processus de création de votre nouvelle
whileboucle, entrez le code suivant :while (anotherPet == "y" && petCount < maxPets) { }Dans le menu Fichier de Visual Studio Code, sélectionnez Enregistrer.
Ouvrez le panneau Terminal intégré dans Visual Studio Code et entrez la commande pour générer votre programme.
Notez que vous ne recevez plus le message d'avertissement concernant le non-usage de
anotherPet.Si des erreurs de build ou des avertissements ont été signalés, corrigez les problèmes avant de continuer.
Vérifier la condition de sortie pour la boucle des nouveaux animaux
Dans cette tâche, vous mettez à jour le bloc de while (anotherPet == "y" && petCount < maxPets) code. Le nouveau code incrémente petCount puis vérifie si petCount est inférieur à maxPets. Si petCount est inférieur à maxPets, vous demandez à l'Utilisateur s'il souhaite entrer des informations pour un autre animal de compagnie, et assurez-vous que la réponse soit y soit n. Après le bloc de while (anotherPet == "y" && petCount < maxPets) code, vous vérifiez la valeur de petCount. Si petCount c’est égal à maxPets, vous informez l’utilisateur qu’aucun animal de compagnie ne peut plus être ajouté.
Remarque
Le code utilisé pour entrer des données d’animal de compagnie est développé dans l’exercice suivant. Pour l’instant, petCount est incrémenté comme si des données étaient entrées et enregistrées dans le ourAnimals tableau. Cela vous permet de terminer le développement de la logique de code associée à la while boucle.
Créez une ligne de code vide à l’intérieur du bloc de code de la
while (anotherPet == "y" && petCount < maxPets)boucle que vous avez créée dans la tâche précédente.Pour incrémenter
petCount, entrez le code suivant :// increment petCount (the array is zero-based, so we increment the counter after adding to the array) petCount = petCount + 1;Pour vérifier si
petCountest inférieur àmaxPets, entrez le code suivant :// check maxPet limit if (petCount < maxPets) { }Dans le bloc de code de l’instruction
ifque vous avez créée, pour demander à l’utilisateur s’il souhaite ajouter un autre animal de compagnie, entrez le code suivant :// another pet? Console.WriteLine("Do you want to enter info for another pet (y/n)");Sous le
WriteLine()message que vous avez entré, pour lire la réponse de l’utilisateur et vérifier que l’utilisateur a entré « y » ou « n », entrez le code suivant :do { readResult = Console.ReadLine(); if (readResult != null) { anotherPet = readResult.ToLower(); } } while (anotherPet != "y" && anotherPet != "n");Recherchez l’instruction
breakqui séparecase "2";decase "3";dans votre instructionswitch.Notez les instructions
Console.WriteLine()etConsole.ReadLine()à la fin de notre codecase "2";.Ce code affiche un message à l’utilisateur, puis suspend l’application.
Pour placer les instructions
Console.WriteLine()etConsole.ReadLine()dans une instructionif, mettez à jour votre code comme suit :if (petCount >= maxPets) { Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); } break; case "3":La valeur de
petCountest incrémentée dans la bouclewhile. SipetCountc’est égal àmaxPets, aucun animal de compagnie ne peut être ajouté auourAnimalstableau. Vous devez informer l’utilisateur quand cela se produit.Pour informer l’utilisateur que Contoso Pets a atteint sa capacité, mettez à jour votre code comme suit :
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":Prenez une minute pour passer en revue le code dans votre
whileboucle et le message utilisateur que vous avez créé.Votre
while (anotherPet == "y" && petCount < maxPets)boucle et votre code qui affiche le message utilisateur doivent ressembler au code suivant :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(); }Dans le menu Fichier de Visual Studio Code, sélectionnez Enregistrer.
Ouvrez le panneau Terminal intégré dans Visual Studio Code et entrez la commande pour générer votre programme.
Corrigez les erreurs ou avertissements de build signalés avant de continuer.
Vérifier votre travail
Dans cette tâche, vous exécutez notre application à partir du terminal intégré et vérifiez que la logique de bouclage et de branchement que vous avez créée fonctionne comme prévu.
Si nécessaire, ouvrez le volet Terminal intégré de Visual Studio Code.
À l’invite de commandes du Terminal, entrez dotnet run.
À l’invite de commandes terminal, entrez 2
Vérifiez que les messages suivants s’affichent :
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n)À l’invite de commande du terminal, entrez n
Vérifiez que votre code quitte la boucle permettant d’entrer de nouveaux animaux quand vous avez entré « n ».
Si votre logique de code fonctionne comme prévu, vous devez voir le menu principal affiché dans le terminal.
Si votre code ne quitte pas la boucle lorsque prévu, appuyez sur Ctrl + C dans le terminal pour forcer l’exécution à arrêter. Vous devez parcourir votre code manuellement et suivre les valeurs des variables de critères de sortie. Mettez à jour votre code si nécessaire pour vous assurer que vous quittez la
whileboucle lorsque l’utilisateur entre « n ». Enregistrez vos modifications, régénérez votre programme et exécutez le test de vérification pour revenir à ce stade.À l’invite de commandes terminal, entrez 2
Une fois de plus, les messages suivants s’affichent :
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n)À l’invite de commandes terminal, entrez y
Prenez une minute pour considérer l'utilisation de
petCountdans votre code.Vous devez comprendre votre logique de code avant de pouvoir valider votre code.
Dans ce cas, votre logique de code repose sur la relation entre
petCountetmaxPets. Vous savez quemaxPetsest assigné à une valeur de8, mais qu’en est-il depetCount? Les éléments suivants permettent d’évaluer la logique que vous avez implémentée :Vous savez que
petCountc’est4quand vous entrez la première itération de lawhileboucle.Vous savez que
petCountest incrémenté à chaque fois que la bouclewhileitère.Vous savez que la valeur attribuée à
petCountet la manière dontpetCountest incrémenté affectent le stockage des données dans le tableauourAnimals. Les éléments suivants expliquent la relation entrepetCountles données stockées dansourAnimals:- L’application ajoute quatre animaux de compagnie au
ourAnimalstableau lorsqu’elle crée les exemples de données. - L'application stocke de nouvelles données dans le tableau
ourAnimalslorsque la valeur depetCountest4. Ce n’est pas un bogue. Le code est judicieux lorsque vous rappelez que les éléments de tableau sont de base zéro. Par exemple,ourAnimals[0,0]contient l’ID de l’animal1etourAnimals[3,0]contient l’ID de l’animal4. Par conséquent, lorsquepetCount4vous stockez des données pour le cinquième animal de compagnie. - L’application stocke les données d’animaux dans le tableau avant l'incrémentation de
petCount. - L’application incrémente
petCountavant de demander à l’utilisateur s’il souhaite ajouter un autre animal. - Lorsque l’application affiche l’invite Voulez-vous entrer des informations pour un autre animal (o/n) pour la première fois,
petCountest déjà réglé sur5.
- L’application ajoute quatre animaux de compagnie au
Si l'utilisateur saisit y lorsqu'on lui demande pour la première fois « Voulez-vous entrer des informations pour un autre animal (y/n) », vous savez que :
- La
while (anotherPet == "y" && petCount < maxPets)boucle effectue une itération. Vous savez que la boucle itérera parce queanotherPet == "y"etpetCount < maxPets. - La valeur affectée à
petCountsera incrémentée (à chaque itération de la bouclewhile). - La valeur affectée sera
petCount6(après que l’utilisateur entre y la première fois).
- La
Gardez à l’esprit cette analyse de la logique de code lorsque vous continuez à tester l’application.
Notez que le panneau Terminal est mis à jour avec le même message « un autre animal de compagnie ? », mais votre code n’affiche pas de mise à jour
petCount.Le panneau Terminal doit maintenant afficher la sortie suivante :
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)À l’invite de commandes terminal, entrez y
Lorsque vous entrez
yune deuxième fois,petCountest incrémenté à7. DoncpetCount, c’est encore moins quemaxPetsÀ l’invite de commandes terminal, entrez y
Lorsque vous entrez
yune troisième fois,petCountest incrémenté à8. DoncpetCountest maintenant égal àmaxPetsVérifiez que votre code quitte la
whileboucle lorsque vous entrez y la troisième fois.Le panneau Terminal doit maintenant afficher la sortie suivante :
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.Si votre code ne quitte pas la boucle lorsque prévu, parcourez votre code manuellement et tracez les valeurs des variables de critères de sortie. Mettez à jour votre code pour vous assurer que vous quittez la boucle lorsqu’elle
petCountatteint une valeur égale àmaxPets. Continuez à répondre à « y » jusqu’à ce que vous sachiez que c’estpetCountégal àmaxPets, qui a une valeur par défaut de8.À l’invite de commandes terminal, appuyez sur Entrée pour continuer à exécuter votre application.
Quittez l’application, puis fermez le panneau Terminal.