Exercício - Escreva código para exibir todos os dados da matriz ourAnimals

Concluído

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:

  1. Outer loop: construa o loop externo que itera através dos animais na matriz ourAnimals.
  2. 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.
  3. Loop interno: construa um loop interno que exiba todas as características do animal de estimação com 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 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.

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

  4. Começando na linha de código em branco que foi criada, inicie uma instrução for da seguinte maneira:

    for ()
    {
    }
    
  5. Reserve um minuto para considerar o que você precisa alcançar com esta for declaraçã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 for, à condição for e ao iterador for são baseados no que se necessita alcançar com a for instrução.

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

    Sua ourAnimals matriz é declarada da seguinte forma: string[,] ourAnimals = new string[maxPets, 6];. Você sabe que o valor atribuído a 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 fazer referência a 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 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 para i < maxPets; se alinhar com a primeira dimensão da matriz. Finalmente, definir o iterador for para i++ irá incrementar o valor de controle do loop em 1 para cada iteração.

  7. Reserve um minuto para considerar a escolha entre uma for instrução e uma foreach instruçã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 foreach loop? Afinal, você sabe que a foreach instruçã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 foreach loop nessa situação é porque a ourAnimals matriz é multidimensional. Como ourAnimals é um array de strings multidimensional, cada elemento contido dentro de ourAnimals é um item separado do tipo string. Se você usasse um foreach loop para iterar o ourAnimals, o foreach reconheceria 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 da matriz separadamente. Em outras palavras, um foreach loop não reconhecerá 8 linhas de elementos de cadeia de caracteres, onde cada linha contém uma coluna de 6 itens. 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ção foreach não é a escolha certa.

    No entanto, se a ourAnimals matriz fosse uma matriz irregular configurada como uma matriz de matrizes de strings, poderia ser utilizada a instrução foreach. Neste caso, criaria um foreach para um loop externo e um segundo foreach para 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 for em vez de uma matriz irregular e loops aninhados foreach. Agora que você vê como cada opção funciona, você pode fazer sua própria escolha em futuros projetos de codificação.

  8. No menu Ficheiro do Visual Studio Code, selecione Guardar.

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

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

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

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

    for (int i = 0; i < maxPets; i++)
    {
    
    }    
    
  2. Para criar uma if instruçã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 #: ")
        {
        }
    }    
    
  3. Reserve 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 te deves lembrar, o 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 avalia 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 um valor de cadeia de caracteres estático de "ID #: " é usado. Este é 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 if instruçã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 a petID, desde que não seja o valor padrão.

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

  5. No menu Ficheiro do Visual Studio Code, selecione Guardar.

  6. Abra o painel Terminal integrado e digite o comando para Construir seu programa.

  7. Corrija quaisquer erros de compilação ou avisos que você vê relatados antes de continuar.

  8. No prompt de comando do Terminal, digite o comando para executar o programa.

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

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

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

  1. 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]);
        }
    }    
    
  2. Para criar o for loop 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 for loop que está "aninhado" dentro do bloco de código do primeiro for loop. Como você sabe, o loop externo itera através dos animais na ourAnimals matriz. 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.

  3. Reserve um minuto para rever a for declaração que introduziu.

    Observe que a variável de controle de loop é chamada j. Quando se encadeiam for ciclos, uma abordagem convencional consiste em usar i no ciclo externo e j no 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.

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

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

  7. No menu Ficheiro do Visual Studio Code, selecione Guardar.

  8. Abra um painel Terminal e crie o programa.

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

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

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

  3. No prompt de comando do Terminal, digite 1

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

  5. Saia do aplicativo e feche o painel Terminal.