Ejercicio: Creación y prueba de un bucle para escribir nuevos datos de mascotas

Completado

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:

  1. Calcular petCount: escriba código que cuente el número de mascotas de la ourAnimals matriz que tienen datos asignados.
  2. Mensajes condicionales: escriba código para mostrar la salida del mensaje cuando petCount sea menor que maxPets.
  3. Bucle externo: cree una estructura de bucle que se usará para escribir nuevos datos de la matriz ourAnimals.
  4. 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".
  5. 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.

  1. Asegúrese de que Visual Studio Code esté abierto y que el archivo Program.cs esté visible en el Editor.

  2. Localice la switch(menuSelection) instrucción y luego encuentre la línea de código case "2":.

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

  4. En la línea de código en blanco que creó, para declarar las anotherPet variables y petCount , escriba el código siguiente:

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

    Estas dos variables controlan la iteración de un while bucle que se usa para escribir nuevos datos de mascotas. Inicializa ambas variables como parte de la declaración.

    • anotherPet se inicializa con un valor de y antes del inicio del while bucle. Recibirá un valor asignado por el usuario, ya sea y o n dentro del while bucle .

    • petCount representa el número de animales con características de mascotas asignadas. Se le asignará un valor calculado fuera del while bucle y se incrementará dentro 1 del while bucle cada vez que se agregue un nuevo animal a la ourAnimals matriz.

    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 petCount en el bloque de código case "2":. El ámbito más grande le permitiría acceder petCount desde cualquier lugar de la aplicación. Si petCount se 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 la ourAnimals matriz, podría reducir petCount por 1. 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 ámbito petCount en el nivel de aplicación aunque no lo use en ningún otro lugar. Después de todo, definir el ámbito petCount en 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 usar petCount más ampliamente dentro de la aplicación, puede actualizar el código para abarcar petCount en un nivel superior. Recuerde mantener las variables en un ámbito lo más estrecho posible y aumentar solo su ámbito cuando sea necesario.

  5. 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 ourAnimals matriz, escriba el código siguiente:

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

    Este código debería ser familiar. Usará este bucle for cada vez que recorra en iteración la matriz ourAnimals.

  6. Dentro del bloque de código de nuestro for bucle, 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 if cada vez que compruebe si se han asignado características de mascotas.

  7. Dentro del bloque de código del if que creó, para incrementar petCount en 1, escriba el código siguiente:

    petCount += 1;
    
  8. Dedique un minuto a examinar el bucle for completado.

    El bucle completado for debe 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 ourAnimals comprobando los datos asignados. Cuando encuentra un animal con datos asignados, incrementa petCounter.

  9. En el menú Archivo de Visual Studio Code, seleccione Guardar.

  10. 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 build desde la terminal.

  11. Corrija los errores de compilación que vea notificados antes de continuar.

    Nota:

    Por ahora, puede ignorar el mensaje de advertencia que indica que anotherPet es asignado pero nunca utilizado. Agregará código que utiliza anotherPet má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.

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

  1. En una línea de código en blanco debajo del for bucle que creó, para ver si petCount es menor que maxPets, escriba el código siguiente:

    if (petCount < maxPets)
    {
    }
    
  2. Dentro del bloque de código de la if instrucció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.

  3. Dedique un minuto a revisar la rama de código case "2": de la instrucción switch.

    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;
    
  4. En el menú Archivo de Visual Studio Code, seleccione Guardar.

  5. Abra el panel Terminal integrado en Visual Studio Code y escriba el comando para compilar el programa.

  6. 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 bucle while que se usa para escribir los datos de una o varias mascotas. La expresión que cree para el while bucle usará anotherPet y 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.

  7. En el símbolo del sistema del terminal, escriba el comando para ejecutar el programa.

    Escriba el comando dotnet run en 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.

  8. En el símbolo del sistema del terminal, escriba 2.

    Este valor corresponde a la rama de código case "2":.

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

  10. En el símbolo del sistema del terminal, presione Entrar para continuar ejecutando la aplicación.

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

  1. En el Editor de código, cree una línea de código en blanco debajo del if (petCount < maxPets) bloque de código.

  2. Para comenzar el proceso de creación del nuevo while bucle, escriba el código siguiente:

    while (anotherPet == "y" && petCount < maxPets)
    {
    }
    
  3. En el menú Archivo de Visual Studio Code, seleccione Guardar.

  4. Abra el panel Terminal integrado en Visual Studio Code y escriba el comando para compilar el programa.

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

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

  2. 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;
    
  3. Para comprobar si petCount es menor que maxPets, escriba el código siguiente:

    // check maxPet limit
    if (petCount < maxPets)
    {
    }
    
  4. Dentro del bloque de código de la if instrucció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)");
    
  5. 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");
    
  6. Busque la instrucción break que separa case "2"; de case "3"; en su instrucción switch.

  7. Observe las instrucciones Console.WriteLine() y Console.ReadLine() al final del código case "2";.

    Este código muestra un mensaje al usuario y, a continuación, pausa la aplicación.

  8. Para encerrar las instrucciones Console.WriteLine() y Console.ReadLine() dentro de una instrucción if, 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 petCount se incrementa dentro del while bucle. Si petCount es igual a maxPets, no se pueden agregar más mascotas a la ourAnimals matriz. Debe informar al usuario cuando esto ocurra.

  9. 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":
    
  10. Dedique un minuto a revisar el código en el bucle while y 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();
    }
    
  11. En el menú Archivo de Visual Studio Code, seleccione Guardar.

  12. Abra el panel Terminal integrado en Visual Studio Code y escriba el comando para compilar el programa.

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

  1. Si es necesario, abra el panel del terminal integrado de Visual Studio Code.

  2. En el terminal de comandos, escriba dotnet run

  3. En el símbolo del sistema del terminal, escriba 2.

  4. 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)
    
  5. En el símbolo del sistema del terminal, escriba n

  6. 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 while bucle 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.

  7. 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)
    
  8. En el símbolo del sistema del terminal, escriba y

  9. Dedique un minuto a tener en cuenta cómo petCount se 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 petCount y maxPets. Sabe que maxPets se le asigna un valor de 8, pero ¿qué hay de petCount? Los siguientes elementos ayudan a evaluar la lógica que ha implementado:

    • Sabes que petCount es 4 cuando entras en la primera iteración del bucle while.

    • Sabe que se incrementa petCount cada vez que el bucle while recorre en iteración.

    • Sabe que el valor asignado a petCount y la forma en que se incrementa petCount afectan a cómo se almacenan los datos en la matriz ourAnimals. Los siguientes elementos explican la relación entre petCount y los datos almacenados en ourAnimals:

      • La aplicación agrega cuatro mascotas a la ourAnimals matriz cuando crea los datos de ejemplo.
      • La aplicación almacena nuevos datos en la ourAnimals matriz cuando el valor de petCount es 4. 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 animal 1 y ourAnimals[3,0] contiene el identificador de mascota para el animal 4. Por lo tanto, cuando petCount es 4, 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 petCount antes 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, petCount ya está configurado en 5.
    • 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á porque anotherPet == "y" y petCount < maxPets.
      • El valor que se asigna a petCount se incrementará cuando el bucle while se repita.
      • El valor asignado a petCount será 6 (después de que el usuario escriba y la primera vez).

    Tenga en cuenta este análisis de la lógica de código a medida que continúa probando la aplicación.

  10. Observe que el panel Terminal se actualiza con el mismo mensaje "¿otra mascota?", pero su código no muestra un petCount actualizado.

    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)
    
  11. En el símbolo del sistema del terminal, escriba y

    Cuando se escribe y una segunda vez, petCount se incrementa a 7. Así que petCount sigue siendo menor que maxPets

  12. En el símbolo del sistema del terminal, escriba y

    Al escribir y una tercera vez, petCount se incrementa a 8. Así que petCount ahora es igual a maxPets

  13. Compruebe que el código sale del while bucle 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 petCount alcance un valor igual a maxPets. Siga respondiendo "y" hasta que sepa que petCount es igual a maxPets, que tiene un valor predeterminado de 8.

  14. En el símbolo del sistema del terminal, presione Entrar para continuar ejecutando la aplicación.

  15. Salga de la aplicación y cierre el panel Terminal.