Ejercicio: escribir código que muestre todos los datos de la matriz ourAnimals

Completado

En este ejercicio, se escriben la estructura de bucles anidados y el bloque de código de selección que se usa para mostrar la información de la matriz ourAnimals. Las tareas detalladas que ha completado durante este ejercicio son:

  1. Bucle externo: cree el bucle externo que recorre los animales de la matriz ourAnimals.
  2. Comprobación de datos: escriba código que compruebe si hay datos de mascotas existentes y muestra el identificador de mascota si existen datos para una mascota.
  3. Bucle interno: cree un bucle interno que muestre todas las características de las mascotas con datos asignados.
  4. Prueba de comprobación: realice pruebas de comprobación del código que desarrolle en este ejercicio.

Importante

Debe completar el ejercicio anterior de este módulo antes de iniciar este ejercicio.

Creación de un bucle para recorrer en iteración la matriz ourAnimals

En esta tarea, se crea el bucle externo for, que se usa para recorrer en iteración los animales de la matriz ourAnimals. Examine la relación entre las dimensiones de la matriz y los parámetros del for bucle. Tenga también en cuenta las diferencias entre usar las instrucciones for y las instrucciones foreach al trabajar con matrices multidimensionales.

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

  2. Dentro del bloque de código de la instrucción de selección switch(menuSelection), encuentra las siguientes líneas de código:

    case "1":
        // List all of our current pet information
        Console.WriteLine("this app feature is coming soon - please check back to see progress.");
        Console.WriteLine("Press the Enter key to continue.");
        readResult = Console.ReadLine();
        break;
    
  3. Elimine la instrucción Console.WriteLine() usada para mostrar el mensaje "próximamente" y deje una línea de código en blanco debajo de la línea de comentario de código // List all of our current pet information.

    El mensaje de comentarios no será necesario porque mostrará el contenido de la ourAnimals matriz. A medida que desarrolle el código correspondiente a las otras selecciones de menú, esos mensajes de comentarios también se actualizarán.

    Deje el mensaje que indica Press the Enter key to continue.

  4. A partir de la línea de código en blanco que creó, comience una for instrucción como se indica a continuación:

    for ()
    {
    }
    
  5. Dedique un minuto a pensar en lo que necesita lograr con esta instrucción for.

    Recuerde que una for instrucción tiene tres partes que controlan cómo implementa iteraciones: para el inicializador; para la condición y para el iterador. Los valores asignados para el inicializador, la condición y el iterador se basan en lo que necesita lograr con la for instrucción.

    En este caso, el for bucle se usa para recorrer en iteración la ourAnimals matriz. Sabe que las matrices tienen un índice cero, lo que significa que una matriz con n elementos se indexa de 0 a n-1. Necesita para el inicializador, para la condición y para que el iterador coincida con las dimensiones de la matriz. En este caso, quiere que el for bucle se inicie en 0, incremente por 1y termine en maxPets-1.

    La ourAnimals matriz se declara de la siguiente manera: string[,] ourAnimals = new string[maxPets, 6];. Sabe que el valor asignado a maxPets es 8. En esta declaración, maxPets especifica el número de elementos de la primera dimensión de la matriz, no el número de índice de base cero que se usa para hacer referencia a elementos de la matriz. Por lo tanto, aunque maxPets = 8, los números de índice de matriz van de 0 a 7.

  6. Para especificar el valor de control del for bucle, actualice el código de la siguiente manera:

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

    Como puede ver, establecer for initializer en int i = 0; se alinea con el índice de matriz de base cero. Del mismo modo, establecer for condition en i < maxPets; se alinea con la primera dimensión de la matriz. Por último, establecer for iterator en i++ aumentará el valor del control de bucle en 1 en cada iteración.

  7. Cuando recorra en iteración la matriz ourAnimals dedique un minuto a decidir si elige una instrucción for o una instrucción foreach.

    El objetivo es pasar por todos los animales de matriz ourAnimals de uno en uno. ¿Por qué no usar un foreach bucle? Después de todo, ya sabe que la instrucción foreach está diseñada para los casos en los que se desea recorrer todos los elementos de una matriz.

    La razón por la que no se usa un foreach bucle en esta situación es porque la ourAnimals matriz es multidimensional. Dado que ourAnimals es una matriz de cadenas multidimensionales, cada elemento contenido en ourAnimals es un elemento independiente de la cadena de tipo. Si usó un bucle foreach para recorrer en iteración ourAnimals, foreach reconocería cada cadena como un elemento independiente en una lista de 48 elementos de cadena (8 x 6 = 48). La foreach instrucción no procesaría las dos dimensiones de matriz por separado. Es decir, un foreach bucle no reconocerá 8 filas de elementos de cadena, donde cada fila contiene una columna de 6 elementos. Puesto que quiere trabajar con un animal a la vez y procesar las seis características animales durante una sola iteración, una foreach declaración no es la elección correcta.

    Sin embargo, si la ourAnimals matriz fuera una matriz escalonada configurada como una matriz de matrices de cadenas, podría usar una foreach declaración. En este caso, crearía un foreach para un bucle externo y un segundo foreach para un bucle interno. El bucle externo recorrería en iteración los elementos de la "matriz de cadenas" de la matriz escalonada. Las matrices de cadenas son las "filas" de la matriz bidimensional. El bucle interno recorrería en iteración los elementos "string" contenidos en las matrices de cadenas. Los elementos de cadena de las matrices de cadenas son las "columnas" de la matriz bidimensional.

    En el siguiente código de ejemplo se muestra el enfoque de la matriz escalonada.

    string[][] jaggedArray = new string[][]
    {
        new string[] { "one1", "two1", "three1", "four1", "five1", "six1" },
        new string[] { "one2", "two2", "three2", "four2", "five2", "six2" },
        new string[] { "one3", "two3", "three3", "four3", "five3", "six3" },
        new string[] { "one4", "two4", "three4", "four4", "five4", "six4" },
        new string[] { "one5", "two5", "three5", "four5", "five5", "six5" },
        new string[] { "one6", "two6", "three6", "four6", "five6", "six6" },
        new string[] { "one7", "two7", "three7", "four7", "five7", "six7" },
        new string[] { "one8", "two8", "three8", "four8", "five8", "six8" }
    };
    
    foreach (string[] array in jaggedArray)
    {
        foreach (string value in array)
        {
            Console.WriteLine(value);
        }
        Console.WriteLine();
    }
    

    Para la aplicación Contoso Pets, es probable que sea más fácil usar una matriz de cadenas multidimensionales y bucles for anidados, en lugar de una matriz escalonada y bucles foreach anidados. Ahora que verá cómo funciona cada opción, puede realizar su propia elección en proyectos de codificación futuros.

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

  9. 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 EXPLORER, haga clic con el botón derecho en Starter y, a continuación, seleccione Abrir en 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 el símbolo del sistema del terminal.

  10. Corrija los errores de compilación o advertencias que vea notificados antes de continuar.

    Recuerde que los mensajes de advertencia y error de compilación indican cuál es el problema y dónde puede encontrarlo. Al resolver problemas, es mejor empezar con los problemas que se producen cerca de la parte superior del código y trabajar hacia abajo.

  11. Cierre el panel del terminal.

Comprobar si hay datos de mascotas existentes y mostrar el resultado

En esta tarea, se usa una if instrucción para encontrar cada mascota en la ourAnimals matriz a la que se han asignado datos de características de mascotas. Cuando se encuentra una mascota con datos asignados, se muestra el petID. Cuando no hay datos asignados, no se muestra nada. Ejecute el código para comprobar que las instrucciones for y if funcionan correctamente.

  1. Cree una línea de código en blanco dentro del bloque de código de declaración for de la siguiente manera:

    for (int i = 0; i < maxPets; i++)
    {
    
    }    
    
  2. Para crear una if instrucción que compruebe si hay datos de ID de mascota, actualice el código de la siguiente manera:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
        }
    }    
    
  3. Dedique un minuto a pensar lo que evalúa la instrucción if y por qué lo hace.

    En primer lugar, considere el lado izquierdo de la expresión: ourAnimals[i, 0]. Observe que la variable i de control de bucle se usa para especificar el animal que se está examinando. Como puede recordar, el 0 en [i, 0] corresponde a petID característica. Puesto que la primera dimensión de la matriz corresponde al "número" del animal, este lado de la expresión garantiza que el código compruebe el valor asignado a petID para cada animal de la matriz.

    En segundo lugar, considere la elección del operador de comparación. Observe que se está usando el operador no igual, !=, . La expresión se evalúa como true siempre que el valor asignado a petID, ourAnimals[i, 0], NO es igual al valor enumerado en el lado derecho de la ecuación.

    En tercer lugar, considere el valor en el lado derecho de la ecuación. Observe que se usa un valor de cadena estático de "ID #: " . Este es el valor predeterminado asignado a petID cuando se generan los datos de ejemplo. Cuando se asignan características a un animal, el petID valor se actualiza y NO será igual al valor predeterminado.

    Esto te indica que el bloque de código de la instrucción if se ejecutará cuando el animal actual tenga características definidas.

    Nota:

    Este es un buen ejemplo de cuándo != se debe usar. No le importa a qué valor se asigna petID siempre que no sea el valor predeterminado.

  4. Para crear un Console.WriteLine() método que muestre el petID dentro del bloque de código de la instrucción if, actualice su código de la siguiente manera:

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

    Observe que un elemento de matriz se puede usar como argumento al llamar al WriteLine() método .

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

  6. Abra el panel Terminal integrado y escriba el comando para compilar el programa.

  7. Corrija los errores de compilación o advertencias que vea notificados antes de continuar.

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

    Si el código genera un error en tiempo de ejecución, corrija los errores, guarde las actualizaciones y reinicie la aplicación.

  9. En el símbolo del sistema de Terminal, para comprobar que la lógica del nuevo código funciona según lo previsto, escriba 1

    Debería ver los siguientes petID valores mostrados:

    ID #: d1
    ID #: d2
    ID #: c3
    ID #: c4
    Press the Enter key to continue.
    

    Estos identificadores corresponden a las mascotas que tienen datos asignados.

    Si el código muestra una salida diferente al seleccionar la opción de menú 1, revise y actualice el código. Recuerde que debe guardar el archivo Program.cs después de realizar actualizaciones.

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

Mostrar todas las características de las mascotas que tengan datos asignados

En esta tarea, se crea un bucle for en el bloque de código de la instrucción if que se usa para mostrar todas las características de la mascota actual.

  1. En el Editor de código, busque las siguientes líneas de código en el archivo Program.cs:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine(ourAnimals[i, 0]);
        }
    }    
    
  2. Para crear el bucle que recorrerá en iteración las características de cada mascota, actualice el for código de la siguiente manera:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine(ourAnimals[i, 0]);
            for (int j = 0; j < 6; j++)
            {
            }
        }
    }    
    

    Observe que ahora tiene un segundo bucle for que está "anidado" dentro del bloque de código del primer bucle for. Como sabe, el bucle exterior recorre en iteración los animales de la matriz ourAnimals. La intención es que el bucle interno recorra en iteración las características de cada animal. Dado que los datos de los animales se almacenan en una matriz multidimensional, será fácil acceder a las características de los animales.

  3. Tómese un minuto para examinar la instrucción for que especificó.

    Observe que la variable de control de bucle se denomina j. Cuando se anidan bucles for, un enfoque convencional consiste en usar i en el bucle externo y j en el bucle interno. Seguir convenciones como esta facilita que otros lean tu código.

    Puesto que se almacenan seis características para cada animal, el para inicializador es int j = 0; y la condición para es j < 6;. Esta combinación de inicializador y condición coincide con el intervalo de índices de matriz que necesita, 0 - 5.

  4. Para mostrar cada característica de una mascota en una línea independiente, actualice el código de la siguiente manera:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine(ourAnimals[i, 0]);
            for (int j = 0; j < 6; j++)
            {
                Console.WriteLine(ourAnimals[i, j]);
            }
        }
    }    
    
  5. Dedique un minuto a pensar en la estructura anidada que ha creado y la salida mostrada que el código va a generar.

    Observe que el valor escrito en la consola, ourAnimals[i, j], usa las variables de control de bucle tanto de los bucles externos como internos for .

    Conoce cada uno de los siguientes elementos:

    • La primera dimensión de la ourAnimals matriz corresponde a las diferentes mascotas.
    • La segunda dimensión de la ourAnimals matriz corresponde a las características de cada mascota.
    • La if instrucción impide que el bucle interno se ejecute cuando no haya datos de mascotas asignados al animal doméstico actual.
    • El bucle interno completa todas sus iteraciones para cada iteración del bucle externo.

    Por lo tanto, sabes que las características de cada animal se mostrarán según lo previsto.

  6. Para reemplazar el mensaje petID por un valor en blanco WriteLine(), actualice el código de la siguiente manera:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine();
            for (int j = 0; j < 6; j++)
            {
                Console.WriteLine(ourAnimals[i, j]);
            }
        }
    }    
    

    Esta actualización final facilita visualización de la separación entre mascotas cuando la salida se muestra en la consola.

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

  8. Abra un panel Terminal y Compile el programa.

  9. Corrija los errores de compilación o advertencias que vea notificados antes de continuar.

Revisa tu trabajo

En esta tarea, ejecutará su aplicación desde el Terminal Integrado y comprobará que la combinación anidada de las instrucciones de for y if genera el resultado esperado.

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

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

  3. En el indicador de comandos de Terminal, escriba 1.

  4. Compruebe que los datos de las mascotas se muestran para las cuatro mascotas que se han asignado datos.

    ID #: d1
    Species: dog
    Age: 2
    Nickname: lola
    Physical description: medium sized cream colored female golden retriever weighing about 65 pounds. housebroken.
    Personality: loves to have her belly rubbed and likes to chase her tail. gives lots of kisses.
    
    ID #: d2
    Species: dog
    Age: 9
    Nickname: loki
    Physical description: large reddish-brown male golden retriever weighing about 85 pounds. housebroken.
    Personality: loves to have his ears rubbed when he greets you at the door, or at any time! loves to lean-in and give doggy hugs.
    
    ID #: c3
    Species: cat
    Age: 1
    Nickname: Puss
    Physical description: small white female weighing about 8 pounds. litter box trained.
    Personality: friendly
    
    ID #: c4
    Species: cat
    Age: ?
    Nickname:
    Physical description:
    Personality:
    Press the Enter key to continue.
    

    Nota:

    Si no ve los resultados esperados, asegúrese de guardar el archivo de Program.cs actualizado. Si no ve los resultados esperados y no puede identificar el problema, puede examinar el código Program.cs en la carpeta Final. La carpeta Final se incluye como parte de la descarga que completó durante la instalación. Se recomienda dedicar tiempo a intentar identificar y corregir la sintaxis y el problema de lógica en el código antes de comprobar el archivo Program.cs en la carpeta Final.

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