Ejercicio: escribir código que muestre todos los datos de la matriz ourAnimals
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:
- Bucle externo: cree el bucle externo que recorre los animales de la matriz ourAnimals.
- 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.
- Bucle interno: cree un bucle interno que muestre todas las características de las mascotas con datos asignados.
- 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.
Asegúrese de que Visual Studio Code esté abierto y que el archivo Program.cs esté visible en el Editor.
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;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
ourAnimalsmatriz. 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.A partir de la línea de código en blanco que creó, comience una
forinstrucción como se indica a continuación:for () { }Dedique un minuto a pensar en lo que necesita lograr con esta instrucción
for.Recuerde que una
forinstrucció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 laforinstrucción.En este caso, el
forbucle se usa para recorrer en iteración laourAnimalsmatriz. Sabe que las matrices tienen un índice cero, lo que significa que una matriz connelementos se indexa de0an-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 elforbucle se inicie en0, incremente por1y termine enmaxPets-1.La
ourAnimalsmatriz se declara de la siguiente manera:string[,] ourAnimals = new string[maxPets, 6];. Sabe que el valor asignado amaxPetses8. En esta declaración,maxPetsespecifica 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, aunquemaxPets = 8, los números de índice de matriz van de0a7.Para especificar el valor de control del
forbucle, 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 eni < maxPets;se alinea con la primera dimensión de la matriz. Por último, establecer for iterator eni++aumentará el valor del control de bucle en1en cada iteración.Cuando recorra en iteración la matriz ourAnimals dedique un minuto a decidir si elige una instrucción
foro una instrucciónforeach.El objetivo es pasar por todos los animales de matriz ourAnimals de uno en uno. ¿Por qué no usar un
foreachbucle? Después de todo, ya sabe que la instrucciónforeachestá 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
foreachbucle en esta situación es porque laourAnimalsmatriz es multidimensional. Dado queourAnimalses una matriz de cadenas multidimensionales, cada elemento contenido enourAnimalses un elemento independiente de la cadena de tipo. Si usó un bucleforeachpara recorrer en iteraciónourAnimals,foreachreconocería cada cadena como un elemento independiente en una lista de 48 elementos de cadena (8 x 6 = 48). Laforeachinstrucción no procesaría las dos dimensiones de matriz por separado. Es decir, unforeachbucle no reconocerá8filas de elementos de cadena, donde cada fila contiene una columna de6elementos. Puesto que quiere trabajar con un animal a la vez y procesar las seis características animales durante una sola iteración, unaforeachdeclaración no es la elección correcta.Sin embargo, si la
ourAnimalsmatriz fuera una matriz escalonada configurada como una matriz de matrices de cadenas, podría usar unaforeachdeclaración. En este caso, crearía unforeachpara un bucle externo y un segundoforeachpara 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
foranidados, en lugar de una matriz escalonada y buclesforeachanidados. Ahora que verá cómo funciona cada opción, puede realizar su propia elección en proyectos de codificación futuros.En el menú Archivo 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 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 builddesde el símbolo del sistema del terminal.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.
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.
Cree una línea de código en blanco dentro del bloque de código de declaración
forde la siguiente manera:for (int i = 0; i < maxPets; i++) { }Para crear una
ifinstrucció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 #: ") { } }Dedique un minuto a pensar lo que evalúa la instrucción
ify por qué lo hace.En primer lugar, considere el lado izquierdo de la expresión:
ourAnimals[i, 0]. Observe que la variableide control de bucle se usa para especificar el animal que se está examinando. Como puede recordar, el0en[i, 0]corresponde apetIDcaracterí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 apetIDpara 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 comotruesiempre 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 apetIDcuando se generan los datos de ejemplo. Cuando se asignan características a un animal, elpetIDvalor se actualiza y NO será igual al valor predeterminado.Esto te indica que el bloque de código de la instrucción
ifse 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 asignapetIDsiempre que no sea el valor predeterminado.Para crear un
Console.WriteLine()método que muestre elpetIDdentro del bloque de código de la instrucciónif, 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 .En el menú Archivo Visual Studio Code, seleccione Guardar.
Abra el panel Terminal integrado y escriba el comando para compilar el programa.
Corrija los errores de compilación o advertencias que vea notificados antes de continuar.
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.Si el código genera un error en tiempo de ejecución, corrija los errores, guarde las actualizaciones y reinicie la aplicación.
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
petIDvalores 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.
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.
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]); } }Para crear el bucle que recorrerá en iteración las características de cada mascota, actualice el
forcó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
forque está "anidado" dentro del bloque de código del primer buclefor. Como sabe, el bucle exterior recorre en iteración los animales de la matrizourAnimals. 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.Tómese un minuto para examinar la instrucción
forque especificó.Observe que la variable de control de bucle se denomina
j. Cuando se anidan buclesfor, un enfoque convencional consiste en usarien el bucle externo yjen 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 esj < 6;. Esta combinación de inicializador y condición coincide con el intervalo de índices de matriz que necesita,0-5.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]); } } }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 internosfor.Conoce cada uno de los siguientes elementos:
- La primera dimensión de la
ourAnimalsmatriz corresponde a las diferentes mascotas. - La segunda dimensión de la
ourAnimalsmatriz corresponde a las características de cada mascota. - La
ifinstrucció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.
- La primera dimensión de la
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.
En el menú Archivo Visual Studio Code, seleccione Guardar.
Abra un panel Terminal y Compile el programa.
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.
Si es necesario, abra el panel del terminal integrado de Visual Studio Code.
En el símbolo del sistema del terminal, escriba dotnet run
En el indicador de comandos de Terminal, escriba 1.
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.
Salga de la aplicación y cierre el panel Terminal.