Ejercicio: Creación y prueba de un bucle para escribir nuevos datos de mascotas
En este ejercicio, se desarrolla código que controla la entrada de nuevos ourAnimals datos de matriz. Calcula los valores iniciales de las variables de control de bucle y construye el bucle que recopila los datos especificados por el usuario para los animales. Las tareas detalladas que ha completado durante este ejercicio son:
- Calcular petCount: escriba código que cuente el número de mascotas de la
ourAnimalsmatriz que tienen datos asignados. - Mensajes condicionales: escriba código para mostrar la salida del mensaje cuando
petCountsea menor quemaxPets. - Bucle externo: cree una estructura de bucle que se usará para escribir nuevos datos de la matriz
ourAnimals. - Criterios de salida: escriba el código que evalúe la condición de salida para el bucle "introduzca nuevos datos en la matriz ourAnimals".
- Prueba de comprobación: realice pruebas de comprobación para el código que desarrolla en este ejercicio.
Importante
Debe completar el ejercicio anterior de este módulo antes de iniciar este ejercicio.
Contar el número de mascotas en la matriz ourAnimals
En esta tarea, se establecen los criterios de salida del bucle de entrada de datos y se crea un for bucle que se puede usar para contar el número de mascotas en ourAnimals a las que se les han asignado datos.
Asegúrese de que Visual Studio Code esté abierto y que el archivo Program.cs esté visible en el Editor.
Localice la
switch(menuSelection)instrucción y luego encuentre la línea de códigocase "2":.Busque la
Console.WriteLine()instrucción que muestra el mensaje "próximamente" y, a continuación, reemplácelo por una línea de código en blanco.En la línea de código en blanco que creó, para declarar las
anotherPetvariables ypetCount, escriba el código siguiente:string anotherPet = "y"; int petCount = 0;Estas dos variables controlan la iteración de un
whilebucle que se usa para escribir nuevos datos de mascotas. Inicializa ambas variables como parte de la declaración.anotherPetse inicializa con un valor deyantes del inicio delwhilebucle. Recibirá un valor asignado por el usuario, ya seayondentro delwhilebucle .petCountrepresenta el número de animales con características de mascotas asignadas. Se le asignará un valor calculado fuera delwhilebucle y se incrementará dentro1delwhilebucle cada vez que se agregue un nuevo animal a laourAnimalsmatriz.
Importante
El ámbito de las variables siempre debe ser lo más estrecho posible. En la aplicación Contoso Pets, podría definir el ámbito en el nivel de aplicación en lugar de definir el ámbito
petCounten el bloque de códigocase "2":. El ámbito más grande le permitiría accederpetCountdesde cualquier lugar de la aplicación. SipetCountse limitaba al nivel de aplicación, podría asignarle un valor al crear los datos de ejemplo y administrar su valor mediante programación durante el resto de la aplicación. Por ejemplo, cuando encuentre un hogar para una mascota y quite la mascota de laourAnimalsmatriz, podría reducirpetCountpor1. La pregunta es, ¿en qué nivel debe definir un ámbito de una variable cuando no está seguro de si se usará en otras partes de la aplicación? En este caso, es tentador definir el ámbitopetCounten el nivel de aplicación aunque no lo use en ningún otro lugar. Después de todo, definir el ámbitopetCounten el nivel de aplicación garantiza que esté disponible si decide usarlo en otro lugar. Quizá también podría definir el ámbito de otras variables en el nivel de aplicación. De este modo, las variables siempre están dentro del alcance y son accesibles. Por lo tanto, ¿por qué no definir el ámbito de las variables en el nivel de aplicación cuando cree que podrían usarse más adelante en la aplicación? Determinar el ámbito de las variables en un nivel superior al necesario puede provocar problemas. El ámbito con privilegios elevados infla los requisitos de recursos de la aplicación y puede exponer la aplicación a riesgos de seguridad innecesarios. A medida que las aplicaciones crecen más grandes y complejas, requieren más recursos. Los teléfonos y los ordenadores asignan memoria para estos recursos cuando están en uso. A medida que las aplicaciones se vuelven más "reales", se vuelven más accesibles. A menudo se puede acceder a las aplicaciones desde la nube u otras aplicaciones. Al complicar estos problemas, las aplicaciones a menudo se dejan en ejecución cuando no se usan. Es importante mantener los requisitos de recursos de una aplicación bajo control y la superficie de seguridad lo más pequeña posible. Aunque los sistemas operativos actuales realizan un gran trabajo de administración de recursos y protección de aplicaciones, sigue siendo recomendable mantener las variables en el ámbito del nivel en el que realmente se necesitan. En su aplicación Contoso Pets, si decide usarpetCountmás ampliamente dentro de la aplicación, puede actualizar el código para abarcarpetCounten un nivel superior. Recuerde mantener las variables en un ámbito lo más estrecho posible y aumentar solo su ámbito cuando sea necesario.En la línea de código debajo de las declaraciones de variable, para crear un bucle que recorre en iteración los animales de la
ourAnimalsmatriz, escriba el código siguiente:for (int i = 0; i < maxPets; i++) { }Este código debería ser familiar. Usará este bucle
forcada vez que recorra en iteración la matrizourAnimals.Dentro del bloque de código de nuestro
forbucle, para comprobar si los datos de características de las mascotas se han asignado a un animal, escriba el código siguiente:if (ourAnimals[i, 0] != "ID #: ") { }De nuevo, este código debería ser familiar. Usará esta instrucción
ifcada vez que compruebe si se han asignado características de mascotas.Dentro del bloque de código del
ifque creó, para incrementarpetCounten 1, escriba el código siguiente:petCount += 1;Dedique un minuto a examinar el bucle
forcompletado.El bucle completado
fordebe tener un aspecto similar al código siguiente:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { petCount += 1; } }Este código recorrerá el array
ourAnimalscomprobando los datos asignados. Cuando encuentra un animal con datos asignados, incrementapetCounter.En el menú Archivo de Visual Studio Code, seleccione Guardar.
Abra el panel Terminal integrado en Visual Studio Code y escriba el comando para compilar el programa.
Para abrir el terminal integrado desde la vista del EXPLORER, haga clic con el botón derecho en Starter y, a continuación, seleccione Abrir en el terminal integrado. También puede usar el menú Ver o Terminal para abrir el panel Terminal integrado.
Para compilar el programa, escriba el comando
dotnet builddesde la terminal.Corrija los errores de compilación que vea notificados antes de continuar.
Nota:
Por ahora, puede ignorar el mensaje de advertencia que indica que
anotherPetes asignado pero nunca utilizado. Agregará código que utilizaanotherPetmás adelante en este ejercicio.Si tiene algún error de compilación, recuerde que los mensajes de advertencia y error de compilación indican cuál es el problema y dónde puede encontrarlo. Si actualizas tu código, recuerda guardar tus cambios antes de recompilar.
Cierre el panel del terminal.
Mostrar el mensaje de salida cuando petCount es menor que maxPets
En esta tarea, comprobará si petCount es menor que maxPets y, si es así, mostrará un mensaje para el usuario.
En una línea de código en blanco debajo del
forbucle que creó, para ver sipetCountes menor quemaxPets, escriba el código siguiente:if (petCount < maxPets) { }Dentro del bloque de código de la
ifinstrucción , para mostrar un mensaje al usuario, escriba el código siguiente:Console.WriteLine($"We currently have {petCount} pets that need homes. We can manage {(maxPets - petCount)} more.");Los usuarios de la aplicación están a punto de introducir características de mascotas. Este mensaje proporciona un contexto importante.
Dedique un minuto a revisar la rama de código
case "2":de la instrucciónswitch.En este momento, la
case "2":rama de código debe tener un aspecto similar al siguiente: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;En el menú Archivo de Visual Studio Code, seleccione Guardar.
Abra el panel Terminal integrado en Visual Studio Code y escriba el comando para compilar el programa.
Corrija los errores de compilación que vea notificados antes de continuar.
De nuevo, puede omitir el mensaje de advertencia sobre la asignación de
anotherPet, pero su no utilización. En la siguiente tarea, empezará a crear el buclewhileque se usa para escribir los datos de una o varias mascotas. La expresión que cree para elwhilebucle usaráanotherPety este mensaje de advertencia desaparecerá.Recuerde que los mensajes de advertencia son cosas sobre las que debe preocuparse, pero no le impedirán ejecutar el programa.
En el símbolo del sistema del terminal, escriba el comando para ejecutar el programa.
Escriba el comando
dotnet runen el símbolo del sistema del terminal para ejecutar el código del programa.Siempre que el código no genere un error en tiempo de ejecución, el menú principal de la aplicación debería mostrarse ahora en el panel Terminal.
En el símbolo del sistema del terminal, escriba 2.
Este valor corresponde a la rama de código
case "2":.Compruebe que el mensaje siguiente se muestra en el terminal.
We currently have 4 pets that need homes. We can manage 4 more. Press the Enter key to continue.Si no ve el mensaje esperado mostrado, revise el código para identificar y corregir el problema. Guarde los cambios, recompile y vuelva a ejecutar la aplicación. Asegúrese de que el código funciona según lo previsto antes de continuar.
En el símbolo del sistema del terminal, presione Entrar para continuar ejecutando la aplicación.
Salga de la aplicación y cierre el panel Terminal.
Creación de una estructura de bucles que se usará para escribir nuevos datos de la matriz ourAnimals
En esta tarea, se crea un while bucle que continúa iterando mientras que anotherPet sea igual a y y petCount sea menor que maxPets.
En el Editor de código, cree una línea de código en blanco debajo del
if (petCount < maxPets)bloque de código.Para comenzar el proceso de creación del nuevo
whilebucle, escriba el código siguiente:while (anotherPet == "y" && petCount < maxPets) { }En el menú Archivo de Visual Studio Code, seleccione Guardar.
Abra el panel Terminal integrado en Visual Studio Code y escriba el comando para compilar el programa.
Tenga en cuenta que ya no recibe el mensaje de advertencia sobre la no utilización de
anotherPet.Si se han notificado errores de compilación o advertencias, corrija los problemas antes de continuar.
Comprobación de la condición de salida para el bucle de nuevas mascotas
En esta tarea, actualizarás el bloque de código while (anotherPet == "y" && petCount < maxPets). El nuevo código incrementa petCount y, a continuación, comprueba si petCount es menor que maxPets. Si petCount es menor que maxPets, se le pregunta al usuario si desea escribir información para otra mascota y asegúrese de que la respuesta sea y o n. Después del while (anotherPet == "y" && petCount < maxPets) bloque de código, se comprueba el valor de petCount. Si petCount es igual a maxPets, informa al usuario de que no se pueden agregar más mascotas.
Nota:
El código que se usa para escribir datos de mascotas se desarrolla en el ejercicio siguiente. Por ahora, petCount se incrementa como si los datos se especificaran y guardaran en la matriz ourAnimals. Esto le permite terminar de desarrollar la lógica de código asociada al while bucle .
Cree una línea de código en blanco dentro del bloque de código del
while (anotherPet == "y" && petCount < maxPets)bucle que creó en la tarea anterior.Para incrementar
petCount, escriba el código siguiente:// increment petCount (the array is zero-based, so we increment the counter after adding to the array) petCount = petCount + 1;Para comprobar si
petCountes menor quemaxPets, escriba el código siguiente:// check maxPet limit if (petCount < maxPets) { }Dentro del bloque de código de la
ifinstrucción que creó, para preguntar al usuario si desea agregar otra mascota, escriba el código siguiente:// another pet? Console.WriteLine("Do you want to enter info for another pet (y/n)");Debajo del
WriteLine()mensaje que escribió, para leer la respuesta del usuario y asegurarse de que el usuario escribió "y" o "n", escriba el código siguiente:do { readResult = Console.ReadLine(); if (readResult != null) { anotherPet = readResult.ToLower(); } } while (anotherPet != "y" && anotherPet != "n");Busque la instrucción
breakque separacase "2";decase "3";en su instrucciónswitch.Observe las instrucciones
Console.WriteLine()yConsole.ReadLine()al final del códigocase "2";.Este código muestra un mensaje al usuario y, a continuación, pausa la aplicación.
Para encerrar las instrucciones
Console.WriteLine()yConsole.ReadLine()dentro de una instrucciónif, actualice su código de la siguiente manera:if (petCount >= maxPets) { Console.WriteLine("Press the Enter key to continue."); readResult = Console.ReadLine(); } break; case "3":El valor de
petCountse incrementa dentro delwhilebucle. SipetCountes igual amaxPets, no se pueden agregar más mascotas a laourAnimalsmatriz. Debe informar al usuario cuando esto ocurra.Para informar al usuario de que Contoso Pets ha alcanzado su capacidad, actualice el código de la siguiente manera:
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":Dedique un minuto a revisar el código en el bucle
whiley el mensaje de usuario que ha creado.El
while (anotherPet == "y" && petCount < maxPets)bucle y el código que muestra el mensaje de usuario deben tener un aspecto similar al siguiente: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(); }En el menú Archivo de Visual Studio Code, seleccione Guardar.
Abra el panel Terminal integrado en Visual Studio Code y escriba el comando para compilar el programa.
Corrija los errores de compilación o advertencias que vea notificados antes de continuar.
Revisa tu trabajo
En esta tarea, ejecutará nuestra aplicación desde el terminal integrado y comprobará que la lógica de bucle y bifurcación que ha creado funciona según lo previsto.
Si es necesario, abra el panel del terminal integrado de Visual Studio Code.
En el terminal de comandos, escriba dotnet run
En el símbolo del sistema del terminal, escriba 2.
Compruebe que ve los mensajes siguientes:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n)En el símbolo del sistema del terminal, escriba n
Compruebe que el código sale del bucle para especificar nuevas mascotas al escribir "n".
Si la lógica de código funciona según lo previsto, debería ver el menú principal que se muestra en el terminal.
Si el código no sale del bucle cuando se espera, presione Ctrl + C en el terminal para forzar la ejecución para detener. Debes recorrer manualmente el código y seguir los valores de las variables que forman los criterios de salida. Actualice el código si es necesario para asegurarse de salir del
whilebucle cuando el usuario escriba "n". Guarde los cambios, recompile el programa y ejecute la prueba de comprobación para volver a llegar a este punto.En el símbolo del sistema del terminal, escriba 2.
Una vez más, verá los siguientes mensajes mostrados:
We currently have 4 pets that need homes. We can manage 4 more. Do you want to enter info for another pet (y/n)En el símbolo del sistema del terminal, escriba y
Dedique un minuto a tener en cuenta cómo
petCountse usa en el código.Debe comprender la lógica de código para poder validar el código.
En este caso, la lógica de código se basa en la relación entre
petCountymaxPets. Sabe quemaxPetsse le asigna un valor de8, pero ¿qué hay depetCount? Los siguientes elementos ayudan a evaluar la lógica que ha implementado:Sabes que
petCountes4cuando entras en la primera iteración del buclewhile.Sabe que se incrementa
petCountcada vez que el buclewhilerecorre en iteración.Sabe que el valor asignado a
petCounty la forma en que se incrementapetCountafectan a cómo se almacenan los datos en la matrizourAnimals. Los siguientes elementos explican la relación entrepetCounty los datos almacenados enourAnimals:- La aplicación agrega cuatro mascotas a la
ourAnimalsmatriz cuando crea los datos de ejemplo. - La aplicación almacena nuevos datos en la
ourAnimalsmatriz cuando el valor depetCountes4. Esto no es un error. El código tiene sentido cuando se recuerda que los elementos de matriz están basados en cero. Por ejemplo,ourAnimals[0,0]contiene el identificador de mascota para animal1yourAnimals[3,0]contiene el identificador de mascota para el animal4. Por lo tanto, cuandopetCountes4, estás almacenando datos para la quinta mascota. - La aplicación almacenará los datos de mascotas en la matriz antes de incrementar
petCount. - La aplicación incrementa
petCountantes de solicitar al usuario que añada otra mascota. - Cuando la aplicación muestre el mensaje ¿Desea introducir información de otra mascota (s/n) por primera vez,
petCountya está configurado en5.
- La aplicación agrega cuatro mascotas a la
Si el usuario escribe y en el primer mensaje ¿Desea escribir información para otra mascota (y/n), sabe que:
- El
while (anotherPet == "y" && petCount < maxPets)bucle iterará. Sabe que el bucle iterará porqueanotherPet == "y"ypetCount < maxPets. - El valor que se asigna a
petCountse incrementará cuando el buclewhilese repita. - El valor asignado a
petCountserá6(después de que el usuario escriba y la primera vez).
- El
Tenga en cuenta este análisis de la lógica de código a medida que continúa probando la aplicación.
Observe que el panel Terminal se actualiza con el mismo mensaje "¿otra mascota?", pero su código no muestra un
petCountactualizado.El panel Terminal debería mostrar ahora la siguiente salida:
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)En el símbolo del sistema del terminal, escriba y
Cuando se escribe
yuna segunda vez,petCountse incrementa a7. Así quepetCountsigue siendo menor quemaxPetsEn el símbolo del sistema del terminal, escriba y
Al escribir
yuna tercera vez,petCountse incrementa a8. Así quepetCountahora es igual amaxPetsCompruebe que el código sale del
whilebucle al escribir y la tercera vez.El panel Terminal debería mostrar ahora la siguiente salida:
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 el código no sale del bucle cuando se espera, recorra manualmente el código y realice un seguimiento de los valores de las variables de criterios de salida. Actualice el código para asegurarse de salir del bucle cuando
petCountalcance un valor igual amaxPets. Siga respondiendo "y" hasta que sepa quepetCountes igual amaxPets, que tiene un valor predeterminado de8.En el símbolo del sistema del terminal, presione Entrar para continuar ejecutando la aplicación.
Salga de la aplicación y cierre el panel Terminal.