Exercício - Escreva código para exibir todos os dados da matriz ourAnimals
Neste exercício, escreves a estrutura de looping aninhada e o bloco de código de seleção que é usado para exibir as informações do array ourAnimals. As tarefas detalhadas que você conclui durante este exercício são:
- Outer loop: construa o loop externo que itera através dos animais na matriz ourAnimals.
- Verificação de dados: escreva um código que verifica os dados existentes do animal de estimação e exibe o ID do animal de estimação se existirem dados para um animal de estimação.
- Loop interno: construa um loop interno que exiba todas as características do animal de estimação com dados atribuídos.
- Teste de verificação: execute testes de verificação para o código que você desenvolve neste exercício.
Importante
Você deve completar o exercício anterior neste módulo antes de iniciar este exercício.
Crie um loop para iterar através da matriz ourAnimals
Nesta tarefa, você cria o loop externo for que é usado para iterar através dos animais na ourAnimals matriz. Você examina a relação entre as dimensões de sua matriz e os parâmetros de seu for loop. Considere também as diferenças entre as instruções for e foreach ao lidar com matrizes multidimensionais.
Verifique se o Visual Studio Code está aberto e se o arquivo Program.cs está visível no Editor.
Dentro do bloco de código para a
switch(menuSelection)instrução de seleção, localize as seguintes linhas 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;Exclua a
Console.WriteLine()declaração usada para exibir a mensagem "em breve" e deixe uma linha em branco abaixo da linha de comentário de código// List all of our current pet information.A mensagem de feedback não será necessária porque você exibirá o conteúdo da
ourAnimalsmatriz. À medida que você desenvolve o código correspondente às outras seleções de menu, essas mensagens de feedback também serão atualizadas.Deixe a mensagem que diz
Press the Enter key to continue.Começando na linha de código em branco que foi criada, inicie uma instrução
forda seguinte maneira:for () { }Reserve um minuto para considerar o que você precisa alcançar com esta
fordeclaração.Lembre-se de que uma
forinstrução tem três partes que controlam como ela implementa iterações: o inicializador for, a condição for e o iterador for. Os valores atribuídos ao inicializador for, à condição for e ao iterador for são baseados no que se necessita alcançar com aforinstrução.Nesse caso, o
forloop é usado para iterar através daourAnimalsmatriz. Você sabe que as matrizes são indexadas zero, o que significa que uma matriz comnelementos é indexada de0atén-1. Você precisa do inicializador, da condição e do iterador para corresponder às dimensões da matriz. Nesse caso, você deseja que oforloop comece em0, incremente em1e termine emmaxPets-1.Sua
ourAnimalsmatriz é declarada da seguinte forma:string[,] ourAnimals = new string[maxPets, 6];. Você sabe que o valor atribuído amaxPetsé8. Nesta declaração,maxPetsespecifica o número de elementos na primeira dimensão da matriz, não o número de índice baseado em zero que você usa para fazer referência a elementos na matriz. Portanto, emboramaxPets = 8, os números de índice da matriz variam de0a7.Para especificar o valor de controle do loop
for, atualize o código da seguinte maneira:for (int i = 0; i < maxPets; i++) { }Como se pode ver, definir o inicializador for para
int i = 0;alinha-o com o índice de matriz baseado em zero. Da mesma forma, definir a condição for parai < maxPets;se alinhar com a primeira dimensão da matriz. Finalmente, definir o iterador for parai++irá incrementar o valor de controle do loop em1para cada iteração.Reserve um minuto para considerar a escolha entre uma
forinstrução e umaforeachinstrução ao iterar através da matriz ourAnimals.O objetivo é iterar através de cada animal na matriz ourAnimals, um de cada vez. Então, por que não usar um
foreachloop? Afinal, você sabe que aforeachinstrução é projetada para casos em que você deseja percorrer cada item em um array de itens.A razão pela qual você não usa um
foreachloop nessa situação é porque aourAnimalsmatriz é multidimensional. ComoourAnimalsé um array de strings multidimensional, cada elemento contido dentro deourAnimalsé um item separado do tipo string. Se você usasse umforeachloop para iterar oourAnimals, oforeachreconheceria cada cadeia de caracteres como um item separado em uma lista de 48 itens de cadeia de caracteres (8 x 6 = 48). Aforeachinstrução não processaria as duas dimensões da matriz separadamente. Em outras palavras, umforeachloop não reconhecerá8linhas de elementos de cadeia de caracteres, onde cada linha contém uma coluna de6itens. Como pretende trabalhar com um animal de cada vez e processar todas as seis características do animal durante uma única iteração, uma declaraçãoforeachnão é a escolha certa.No entanto, se a
ourAnimalsmatriz fosse uma matriz irregular configurada como uma matriz de matrizes de strings, poderia ser utilizada a instruçãoforeach. Neste caso, criaria umforeachpara um loop externo e um segundoforeachpara um loop interno. O loop externo iteraria através dos elementos "string array" na matriz irregular. As matrizes de cadeia de caracteres são as "linhas" na matriz bidimensional. O loop interno iteraria através dos elementos "string" contidos nas matrizes de string. Os elementos de cadeia de caracteres nas matrizes de cadeia de caracteres são as "colunas" na matriz bidimensional.O exemplo de código a seguir demonstra a abordagem de matriz irregular.
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 a aplicação Contoso Pets, provavelmente é mais fácil usar uma matriz de strings multidimensional e loops aninhados
forem vez de uma matriz irregular e loops aninhadosforeach. Agora que você vê como cada opção funciona, você pode fazer sua própria escolha em futuros projetos de codificação.No menu Ficheiro do Visual Studio Code, selecione Guardar.
Abra o painel Terminal integrado no Visual Studio Code e digite o comando para compilar seu programa.
Para abrir o Terminal de Integração a partir da vista EXPLORER, clique com o botão direito do rato em Iniciador e, em seguida, selecione Abrir no Terminal Integrado. Você também pode usar o menu Exibir ou Terminal para abrir o painel Terminal integrado.
Para criar o programa, digite o
dotnet buildcomando no prompt de comando do Terminal.Corrija quaisquer erros de compilação ou avisos que você vê relatados antes de continuar.
Lembre-se de que as mensagens de erro e aviso do Build informam qual é o problema e onde você pode encontrá-lo. Ao resolver problemas, é melhor começar com os problemas que ocorrem perto da parte superior do seu código e trabalhar para baixo.
Feche o painel Terminal.
Verifique os dados existentes do animal de estimação e exiba o resultado
Nesta tarefa, usas uma instrução if para localizar cada animal de estimação na matriz ourAnimals que recebeu dados de características de animais de estimação. Quando um animal de estimação com dados atribuídos é encontrado, você exibe o petID. Quando não há dados atribuídos, nada é exibido. Execute o código para verificar se suas instruções for e if estão funcionando corretamente.
Crie uma linha de código em branco dentro do bloco
forde código da instrução da seguinte maneira:for (int i = 0; i < maxPets; i++) { }Para criar uma
ifinstrução que verifique os dados de identificação do animal de estimação, atualize o código da seguinte maneira:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { } }Reserve um minuto para considerar o que esta
ifdeclaração está avaliando e por quê.Primeiro, considere o lado esquerdo da expressão:
ourAnimals[i, 0]. Observe que a variávelide controle de loop é usada para especificar o animal que está sendo examinado. Como te deves lembrar, o0em[i, 0]corresponde à característicapetID. Como a primeira dimensão da matriz corresponde ao "número" do animal, esse lado da expressão garante que seu código verifique o valor atribuído apetIDcada animal na matriz.Em segundo lugar, considere a escolha do operador de comparação. Observe que o operador não-igual,
!=, está sendo usado. A expressão avalia comotruesempre que o valor atribuído a petID,ourAnimals[i, 0], NÃO é igual ao valor listado no lado direito da equação.Em terceiro lugar, considere o valor no lado direito da equação. Observe que um valor de cadeia de caracteres estático de
"ID #: "é usado. Este é o valor padrão atribuído apetIDquando os dados de exemplo são gerados. Quando as características são atribuídas a um animal, opetIDvalor é atualizado e NÃO será igual ao valor padrão.Isso informa que o bloco de código da
ifinstrução será executado quando o animal atual tiver características definidas.Observação
Este é um bom exemplo de quando
!=deve ser usado. Você não se importa com qual valor é atribuído apetID, desde que não seja o valor padrão.Para criar um
Console.WriteLine()método que exiba opetIDdentro do bloco de código da instruçãoif, atualize o código da seguinte maneira:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { Console.WriteLine(ourAnimals[i, 0]); } }Observe que um elemento de matriz pode ser usado como um argumento ao chamar o
WriteLine()método.No menu Ficheiro do Visual Studio Code, selecione Guardar.
Abra o painel Terminal integrado e digite o comando para Construir seu programa.
Corrija quaisquer erros de compilação ou avisos que você vê relatados antes de continuar.
No prompt de comando do Terminal, digite o comando para executar o programa.
Digite o comando
dotnet runno prompt de comando do Terminal para executar o código do seu programa.Se o código gerar um erro de tempo de execução, corrija os erros, salve as atualizações e reinicie o aplicativo.
No prompt de comando do Terminal, para verificar se a nova lógica de código está funcionando conforme o esperado, digite 1
Você verá os seguintes
petIDvalores exibidos:ID #: d1 ID #: d2 ID #: c3 ID #: c4 Press the Enter key to continue.Estes IDs correspondem aos animais de estimação que têm dados atribuídos.
Se o seu código exibir uma saída diferente quando você selecionar a opção de menu 1, revise e atualize seu código. Lembre-se de que você precisa salvar seu arquivo Program.cs depois de fazer atualizações.
Saia do aplicativo e feche o painel Terminal.
Exibir todas as características de animais de estimação com dados atribuídos
Nesta tarefa, você cria um for loop dentro do if bloco de código de instrução que é usado para exibir todas as características do animal de estimação atual.
No Editor de códigos, localize as seguintes linhas de código no arquivo Program.cs:
for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { Console.WriteLine(ourAnimals[i, 0]); } }Para criar o
forloop que irá iterar através das características de cada animal de estimação, atualize seu código da seguinte maneira: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 agora você tem um segundo
forloop que está "aninhado" dentro do bloco de código do primeiroforloop. Como você sabe, o loop externo itera através dos animais naourAnimalsmatriz. A intenção é que o loop interno itere através das características de cada animal. Uma vez que os dados dos animais são armazenados numa matriz multidimensional, será fácil aceder às características dos animais.Reserve um minuto para rever a
fordeclaração que introduziu.Observe que a variável de controle de loop é chamada
j. Quando se encadeiamforciclos, uma abordagem convencional consiste em usarino ciclo externo ejno ciclo interno. Seguir convenções como esta torna mais fácil para outras pessoas lerem o seu código.Como seis características são armazenadas para cada animal, o para inicializador é
int j = 0;e o para condição éj < 6;. Essa combinação de inicializador e condição corresponde ao intervalo de índice de matriz de que você precisa,0-5.Para exibir cada característica de um animal de estimação em uma linha separada, atualize seu código da seguinte maneira:
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 um minuto para considerar a estrutura aninhada que criaste e o resultado que o teu código irá mostrar.
Observe que o valor gravado no console,
ourAnimals[i, j], usa as variáveis de controle de loop dos loops externo e internofor.Você conhece cada um dos seguintes itens:
- A primeira dimensão da
ourAnimalsmatriz corresponde aos diferentes animais de estimação. - A segunda dimensão da
ourAnimalsmatriz corresponde às características de cada animal de estimação. - A instrução
ifevita que o ciclo interno seja executado quando não há dados atribuídos ao animal de estimação atual. - O loop interno completa todas as suas iterações para cada iteração do loop externo.
Portanto, você sabe que as características de cada animal serão exibidas como pretendido.
- A primeira dimensão da
Para substituir a mensagem petID por um espaço em branco
WriteLine(), atualize o código da seguinte forma: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 atualização final torna mais fácil ver a separação entre animais de estimação quando sua saída é exibida no console.
No menu Ficheiro do Visual Studio Code, selecione Guardar.
Abra um painel Terminal e crie o programa.
Corrija quaisquer erros de compilação ou avisos que você vê relatados antes de continuar.
Verifique o seu trabalho
Nesta tarefa, executa a sua aplicação a partir do Terminal Integrado e verifica se a sua combinação aninhada de instruções for e if produz o resultado esperado.
Se necessário, abra o painel Terminal integrado do Visual Studio Code.
No prompt de comando do Terminal, digite dotnet run
No prompt de comando do Terminal, digite 1
Verifique se os dados do animal de estimação são exibidos para os quatro animais de estimação aos quais foram atribuídos dados.
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.Observação
Se não vir os resultados esperados apresentados, verifique se salvou o ficheiro Program.cs atualizado. Se não estiver a ver os resultados esperados e não conseguir identificar o problema, pode examinar o código Program.cs na pasta Final. A pasta Final está incluída como parte do download concluído durante a instalação. Recomendamos que você gaste tempo tentando identificar e corrigir problemas de sintaxe e lógica em seu código antes de verificar o arquivo Program.cs na pasta Final.
Saia do aplicativo e feche o painel Terminal.