Exercício – Escrever um código para exibir todos os dados da matriz ourAnimals
Neste exercício, você vai escrever a estrutura de loop aninhado e o bloco de código de seleção usado para exibir as informações da matriz ourAnimals. As tarefas detalhadas que você concluir durante este exercício são:
- Loop externo: criar o loop externo que faz a iteração pelos animais na matriz ourAnimals.
- Verificação de dados: escreva o código que verifica os dados existentes do animal de estimação e exibe a ID do animal de estimação se houver dados para um animal de estimação.
- Loop interno: criar um loop interno que exiba todas as características dos animais de estimação com os 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 concluir o exercício anterior neste módulo antes de iniciar este exercício.
Criar um loop para a iteração na matriz ourAnimals
Nesta tarefa, você cria o loop for externo que é usado para a iteração pelos animais na matriz ourAnimals. Você examina a relação entre as dimensões da matriz e os parâmetros do loop for. Além disso, você considera as diferenças entre o uso de instruções for e foreach ao trabalhar 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 da
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 instrução
Console.WriteLine()usada para exibir a mensagem “Em breve” e deixe uma linha de código em branco abaixo da linha de comentário de código// List all of our current pet information.A mensagem de comentários 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 comentários 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 você criou, inicie uma
fordeclaração da seguinte maneira:for () { }Tire um minuto para considerar o que você precisa alcançar com esta
forinstruçã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, à condição e ao iterador baseiam-se no que você precisa obter com a instruçãofor.Nesse caso, o loop
foré usado para a iteração na matrizourAnimals. Você sabe que as matrizes são indexadas zero, o que significa que uma matriz comnelementos é indexada de0paran-1. Você precisa do inicializador, da condição e do iterador para corresponder às dimensões do array. Nesse caso, você deseja que oforloop comece em0, incremente por1e termine emmaxPets-1.Sua
ourAnimalsmatriz é declarada da seguinte maneira:string[,] ourAnimals = new string[maxPets, 6];. Você sabe que o valor atribuídomaxPetsé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 referenciar 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 é possível ver, a configuração de para inicializador como
int i = 0;se alinha ao índice de matriz baseado em zero. Da mesma forma, a configuração de para condição comoi < maxPets;se alinha à primeira dimensão da matriz. Por fim, ao definir o iterador do 'for' parai++, o valor de controle do loop será incrementado em1a cada iteração.Reserve um minuto para considerar a escolha entre uma instrução
foreforeachao fazer a iteração na matriz ourAnimals.O objetivo é a iteração de cada animal na matriz ourAnimals, um por vez. Então, por que não usar um
foreachloop? Afinal, você sabe que a instruçãoforeachfoi projetada para casos em que você deseja iterar cada item em uma matriz de itens.O motivo pelo qual você não usa um
foreachloop nessa situação é porque aourAnimalsmatriz é uma matriz multidimensional. ComoourAnimalsé uma matriz multidimensional de cadeias de caracteres, cada elemento contido dentro deourAnimalsé um item separado do tipo string. Se você usar um loopforeachpara a iteração emourAnimals,foreachreconhecerá 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 de matriz separadamente. Em outras palavras, umforeachloop não reconhecerá8linhas de elementos de cadeia de caracteres, em que cada linha contém uma coluna de6itens. Como você deseja trabalhar com um animal por vez e processar todas as seis características dos animais durante uma única iteração, um comandoforeachnão é a escolha certa.No entanto, se
ourAnimalsfor uma matriz denteada configurada como uma matriz de matrizes de cadeia de caracteres, será possível usar uma instruçãoforeach. Nesse caso, você criaria umforeachpara um loop externo e umforeachpara um loop interno. O loop externo fará a iteração nos elementos da “matriz de cadeia de caracteres” na matriz denteada. As matrizes de cadeia de caracteres são as "linhas" na matriz bidimensional. O loop interno fará a iteração nos elementos da “cadeia de caracteres” contidos nas matrizes de cadeia de caracteres. 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 denteada.
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 o aplicativo Contoso Pets, provavelmente é mais fácil usar uma matriz de cadeia de caracteres multidimensional e loops
foraninhados em vez de uma matriz denteada e loopsforeachaninhados. Agora que você vê como cada opção funciona, você pode fazer sua própria escolha em projetos de codificação futuros.No menu Arquivo do Visual Studio Code, selecione Salvar.
Abra o painel Terminal Integrado no Visual Studio Code e insira o comando para Criar seu programa.
Para abrir o Terminal de Integração no modo de exibição EXPLORER, clique com o botão direito do mouse em Starter e selecione Abrir no Terminal Integrado. Você também pode usar o menu Exibir ou Terminal para abrir o painel terminal integrado.
Para criar seu programa, insira o
dotnet buildcomando no prompt de comando terminal.Corrija os erros de build ou avisos que você vê relatados antes de continuar.
Lembre-se de que o erro de build e as mensagens de aviso 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 código e trabalhar para baixo.
Feche o painel do terminal.
Verificar se há dados existentes de animais de estimação e exibir o resultado
Nesta tarefa, você usa uma declaração if para encontrar cada animal de estimação no array ourAnimals que foi atribuído dados de características do animal. Quando um animal de estimação com dados atribuídos é encontrado, você exibe a petID. Quando não há dados atribuídos, nada é exibido. Execute o código para verificar se as instruções for e if estão funcionando corretamente.
Crie uma linha de código em branco dentro do bloco de código da instrução
forda seguinte maneira:for (int i = 0; i < maxPets; i++) { }Para criar uma instrução
ifque verifica os dados da ID do animal de estimação, atualize o código da seguinte maneira:for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { } }Tire 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 talvez você se lembre, a0em[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 é avaliada 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 é usado um valor de cadeia de caracteres estático igual a
"ID #: ". Esse é 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 instrução
ifserá executado quando características definidas estiverem presentes no animal atual.Observação
Este é um bom exemplo para quando
!=deve ser usado. Você não se importa com qual valor é atribuídopetID, desde que não seja o valor padrão.Para criar um método que exibe o
Console.WriteLine()dentro do bloco de código da instruçãopetID, atualize o seu código da seguinte forma: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 Arquivo do Visual Studio Code, selecione Salvar.
Abra o painel Terminal Integrado e insira o comando para Criar seu programa.
Corrija os erros de build ou avisos que você vê relatados antes de continuar.
No prompt de comando terminal, insira o comando para executar seu programa.
Insira o
dotnet runcomando no prompt de comando terminal para executar o código do programa.Se o código gerar um erro de runtime, corrija os erros, salve as atualizações e reinicie o aplicativo.
No prompt de comando terminal, para verificar se sua nova lógica de código está funcionando conforme o esperado, insira 1
Você deverá ver os seguintes
petIDvalores exibidos:ID #: d1 ID #: d2 ID #: c3 ID #: c4 Press the Enter key to continue.Esses IDs correspondem aos animais de estimação que têm dados atribuídos.
Se o código exibir uma saída diferente quando você selecionar a opção de menu 1, examine e atualize seu código. Lembre-se de que você precisa salvar seu arquivo de 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 os dados atribuídos
Nesta tarefa, você cria um for loop dentro do if bloco de código de instrução usado para exibir todas as características do animal de estimação atual.
No Editor de código, localize as seguintes linhas de código em seu arquivo de Program.cs:
for (int i = 0; i < maxPets; i++) { if (ourAnimals[i, 0] != "ID #: ") { Console.WriteLine(ourAnimals[i, 0]); } }Para criar o
forloop que itera pelas 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 há um segundo loop
for“aninhado” dentro do bloco de código do primeiro loopfor. Como você sabe, o loop externo faz a iteração pelos animais na matrizourAnimals. A intenção é que o loop interno faça a iteração pelas características de cada animal. Como os dados animais são armazenados em uma matriz multidimensional, será fácil acessar características animais.Reserve um minuto para examinar a
fordeclaração que você inseriu.Observe que a variável de controle de loop é nomeada
j. Quando você aninhar loopsfor, uma abordagem convencional será usarino loop externo ejno loop interno. Seguir convenções como essa torna mais fácil para outras pessoas lerem seu código.Como seis características são armazenadas para cada animal, para inicializador é
int j = 0;e 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-5Para 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]); } } }Reserve um minuto para considerar a estrutura aninhada que você criou e a saída exibida que será produzida pelo código.
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
ifimpede que o loop interno seja executado quando não há dados atribuídos ao animal de estimação atual. - O loop interno conclui todas as iterações para cada iteração do loop externo.
Portanto, você sabe que as características de cada animal serão exibidas conforme o esperado.
- A primeira dimensão da
Para substituir a mensagem petID por um espaço em branco
WriteLine(), atualize o código da seguinte maneira: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]); } } }Essa atualização final facilita a separação entre os animais de estimação quando a saída é exibida no console.
No menu Arquivo do Visual Studio Code, selecione Salvar.
Abra um painel terminal e crie o programa.
Corrija os erros de build ou avisos que você vê relatados antes de continuar.
Verifique seu trabalho
Nesta tarefa, você executa seu aplicativo no Terminal Integrado e verifica se 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, insira dotnet run
No prompt de comando terminal, insira 1
Verifique se os dados de animais de estimação são exibidos para os quatro animais de estimação que receberam 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 você não vir os resultados esperados exibidos, verifique se salvou o arquivo de Program.cs atualizado. Se você não estiver vendo os resultados esperados e não conseguir identificar o problema, poderá examinar o código Program.cs na pasta Final. A pasta Final é incluída como parte do download que você concluiu durante a Instalação. Recomendamos que você gaste tempo tentando identificar e corrigir o problema 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.