Exercício – Escrever um código para exibir todos os dados da matriz ourAnimals

Concluído

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:

  1. Loop externo: criar o loop externo que faz a iteração pelos animais na matriz ourAnimals.
  2. 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.
  3. Loop interno: criar um loop interno que exiba todas as características dos animais de estimação com os dados atribuídos.
  4. 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.

  1. Verifique se o Visual Studio Code está aberto e se o arquivo Program.cs está visível no Editor.

  2. 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;
    
  3. 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 ourAnimals matriz. À 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.

  4. Começando na linha de código em branco que você criou, inicie uma for declaração da seguinte maneira:

    for ()
    {
    }
    
  5. Tire um minuto para considerar o que você precisa alcançar com esta for instrução.

    Lembre-se de que uma for instruçã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ção for .

    Nesse caso, o loop for é usado para a iteração na matriz ourAnimals. Você sabe que as matrizes são indexadas zero, o que significa que uma matriz com n elementos é indexada de 0 para n-1. Você precisa do inicializador, da condição e do iterador para corresponder às dimensões do array. Nesse caso, você deseja que o for loop comece em 0, incremente por 1e termine em maxPets-1.

    Sua ourAnimals matriz é declarada da seguinte maneira: string[,] ourAnimals = new string[maxPets, 6];. Você sabe que o valor atribuído maxPets é 8. Nesta declaração, maxPets especifica 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, embora maxPets = 8, os números de índice da matriz variam de 0 a 7.

  6. 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 como i < maxPets; se alinha à primeira dimensão da matriz. Por fim, ao definir o iterador do 'for' para i++, o valor de controle do loop será incrementado em 1 a cada iteração.

  7. Reserve um minuto para considerar a escolha entre uma instrução for e foreach ao 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 foreach loop? Afinal, você sabe que a instrução foreach foi projetada para casos em que você deseja iterar cada item em uma matriz de itens.

    O motivo pelo qual você não usa um foreach loop nessa situação é porque a ourAnimals matriz é uma matriz multidimensional. Como ourAnimals é uma matriz multidimensional de cadeias de caracteres, cada elemento contido dentro de ourAnimals é um item separado do tipo string. Se você usar um loop foreach para a iteração em ourAnimals, foreach reconhecerá cada cadeia de caracteres como um item separado em uma lista de 48 itens de cadeia de caracteres (8 x 6 = 48). A foreach instrução não processaria as duas dimensões de matriz separadamente. Em outras palavras, um foreach loop não reconhecerá 8 linhas de elementos de cadeia de caracteres, em que cada linha contém uma coluna de 6 itens. Como você deseja trabalhar com um animal por vez e processar todas as seis características dos animais durante uma única iteração, um comando foreach não é a escolha certa.

    No entanto, se ourAnimals for uma matriz denteada configurada como uma matriz de matrizes de cadeia de caracteres, será possível usar uma instrução foreach. Nesse caso, você criaria um foreach para um loop externo e um foreach para 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 for aninhados em vez de uma matriz denteada e loops foreach aninhados. Agora que você vê como cada opção funciona, você pode fazer sua própria escolha em projetos de codificação futuros.

  8. No menu Arquivo do Visual Studio Code, selecione Salvar.

  9. 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 build comando no prompt de comando terminal.

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

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

  1. Crie uma linha de código em branco dentro do bloco de código da instrução for da seguinte maneira:

    for (int i = 0; i < maxPets; i++)
    {
    
    }    
    
  2. Para criar uma instrução if que 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 #: ")
        {
        }
    }    
    
  3. Tire um minuto para considerar o que esta if declaração está avaliando e por quê.

    Primeiro, considere o lado esquerdo da expressão: ourAnimals[i, 0]. Observe que a variável i de controle de loop é usada para especificar o animal que está sendo examinado. Como talvez você se lembre, a 0 em [i, 0] corresponde à característica petID. 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 a petID cada 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 como true sempre 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 a petID quando os dados de exemplo são gerados. Quando as características são atribuídas a um animal, o petID valor é atualizado e NÃO será igual ao valor padrão.

    Isso informa que o bloco de código da instrução if será 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ído petID , desde que não seja o valor padrão.

  4. Para criar um método que exibe o Console.WriteLine() dentro do bloco de código da instrução petID, 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.

  5. No menu Arquivo do Visual Studio Code, selecione Salvar.

  6. Abra o painel Terminal Integrado e insira o comando para Criar seu programa.

  7. Corrija os erros de build ou avisos que você vê relatados antes de continuar.

  8. No prompt de comando terminal, insira o comando para executar seu programa.

    Insira o dotnet run comando 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.

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

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

  1. 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]);
        }
    }    
    
  2. Para criar o for loop 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 loop for. Como você sabe, o loop externo faz a iteração pelos animais na matriz ourAnimals. 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.

  3. Reserve um minuto para examinar a for declaração que você inseriu.

    Observe que a variável de controle de loop é nomeada j. Quando você aninhar loops for, uma abordagem convencional será usar i no loop externo e j no 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 - 5

  4. 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]);
            }
        }
    }    
    
  5. 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 interno for .

    Você conhece cada um dos seguintes itens:

    • A primeira dimensão da ourAnimals matriz corresponde aos diferentes animais de estimação.
    • A segunda dimensão da ourAnimals matriz corresponde às características de cada animal de estimação.
    • A instrução if impede 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.

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

  7. No menu Arquivo do Visual Studio Code, selecione Salvar.

  8. Abra um painel terminal e crie o programa.

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

  1. Se necessário, abra o painel Terminal Integrado do Visual Studio Code.

  2. No prompt de comando do Terminal, insira dotnet run

  3. No prompt de comando terminal, insira 1

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

  5. Saia do aplicativo e feche o painel terminal.