Exercício – Criar e testar um loop para inserir novos dados de animal de estimação

Concluído

Neste exercício, você desenvolverá um código que controla a entrada de novos dados de matriz ourAnimals. Você calcula os valores iniciais das variáveis de controle do loop e cria o loop que coleta dados especificados pelo usuário para os animais. As tarefas detalhadas a serem realizadas durante este exercício são as seguintes:

  1. Calcular petCount: escreva o código que conta o número de animais de estimação na matriz ourAnimals com dados atribuídos.
  2. Mensagens condicionais: escreva o código para exibir a saída da mensagem quando petCount for menor que maxPets.
  3. Loop externo: crie uma estrutura de loop que será usada para inserir novos dados da matriz ourAnimals.
  4. Critérios de saída: escreva o código que avalia a condição de saída para o loop "inserir novos dados da matriz ourAnimals".
  5. Teste de verificação: execute testes de verificação para o código desenvolvido neste exercício.

Importante

Para concluir o exercício atual deste módulo, é preciso concluir o anterior.

Conte o número de animais de estimação na matriz ourAnimals

Nesta tarefa, você estabelece os critérios de saída para o loop de entrada de dados e cria um loop for que pode ser usado para contar o número de animais de estimação em ourAnimals com dados atribuídos.

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

  2. Localize a instrução switch(menuSelection) e localize a linha de código case "2":.

  3. Localize a instrução Console.WriteLine() que exibe a mensagem "em breve" e substitua-a por uma linha de código em branco.

  4. Na linha de código em branco que você criou, para declarar as variáveis anotherPet e petCount, insira o seguinte código:

    string anotherPet = "y";
    int petCount = 0;
    

    Essas duas variáveis controlam a iteração de um loop while que é usado para inserir novos dados de animais de estimação. Você inicializa ambas as variáveis como parte da instrução.

    • anotherPet é inicializado com um valor de y anterior ao início do loop while. Ele receberá um valor atribuído pelo usuário, y ou n, dentro do loop while.

    • petCount representa o número de animais com características de animais de estimação atribuídas. Receberá um valor calculado fora do loop while e será incrementado em 1 dentro do loop while sempre que um novo animal for adicionado à matriz ourAnimals.

    Importante

    O escopo de suas variáveis deve ser sempre o mais estreito possível. No aplicativo Contoso Pets, é possível definir o escopo petCount no nível do aplicativo em vez de no bloco de código case "2":. O escopo maior permite o acesso a petCount de qualquer lugar no aplicativo. Se petCount teve o escopo definido no nível do aplicativo, é possível atribuir um valor a ele ao criar os dados de exemplo e gerenciar programaticamente esse valor em todo o restante do aplicativo. Por exemplo, quando você encontra um lar para um animal de estimação e o remove da matriz ourAnimals, é possível reduzir petCount por 1. A questão é: em que nível você deve definir o escopo de uma variável quando não tem certeza de que ela será usada em outras partes do aplicativo? Nesse caso, é tentador definir o escopo petCount no nível do aplicativo, mesmo que você não o esteja usando em nenhum outro lugar. Afinal, o escopo de petCount no nível do aplicativo garante que ele esteja disponível se você decidir usá-lo em outro lugar. Também seria possível definir o escopo de outras variáveis no nível do aplicativo. Dessa forma, suas variáveis estão sempre no escopo e acessíveis. Então, por que não definir o escopo das variáveis no nível do aplicativo quando você acha que elas podem ser usadas posteriormente nele? Definir o escopo das variáveis em um nível mais alto do que o necessário pode resultar em problemas. O escopo elevado aumenta os requisitos de recursos do aplicativo e ele pode ser exposto a riscos de segurança desnecessários. À medida que os aplicativos ficam maiores e mais complexos, eles exigem mais recursos. Telefones e computadores alocam memória para esses recursos quando estão no escopo. À medida que os aplicativos se tornam mais "reais", eles se tornam mais acessíveis. Os aplicativos geralmente são acessíveis por meio da nuvem ou de outros aplicativos. Para agravar esses problemas, os aplicativos geralmente são deixados em execução quando não estão sendo usados. É importante manter os requisitos de recursos de um aplicativo sob controle e a pegada de segurança o menor possível. Embora os sistemas operacionais de hoje façam um ótimo trabalho de gerenciamento de recursos e proteção de aplicativos, ainda é uma melhor prática manter o escopo das variáveis no nível realmente necessário. No aplicativo Contoso Pets, se você decidir usar petCount de maneira mais ampla, atualize o código para um escopo petCount em um nível superior. Lembre-se de manter o escopo das variáveis o mais restrito possível e apenas aumente-o quando necessário.

  5. Na linha de código abaixo de suas declarações de variáveis, para criar um loop que faça a iteração nos animais na matriz ourAnimals, digite o seguinte código:

    for (int i = 0; i < maxPets; i++)
    {
    }
    

    Esse código deve parecer familiar. Você usará esse loop for sempre que fizer a iteração na matriz ourAnimals.

  6. Dentro do bloco de código do loop for, para verificar se os dados de características do animal de estimação foram atribuídos a um animal, digite o seguinte código:

    if (ourAnimals[i, 0] != "ID #: ")
    {
    }
    

    Novamente, esse código deve parecer familiar. Você usará essa instrução if sempre que verificar se as características do animal de estimação foram atribuídas.

  7. No bloco de código do if que você criou, para incrementar petCount em 1, digite o seguinte código:

    petCount += 1;
    
  8. Reserve um minuto para examinar o loop for concluído.

    Seu loop for concluído deve se parecer com o seguinte código:

    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            petCount += 1;
        }
    }
    

    Esse código passará o loop pela matriz ourAnimals verificando os dados atribuídos. Ao encontrar um animal com os dados atribuídos, ele incrementa petCounter.

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

  10. Abra o painel “Terminal Integrado” no Visual Studio Code e insira o comando para Criar o programa.

    Para abrir o terminal integrado na exibição “GERENCIADOR”, clique com o botão direito do mouse em Starter e selecione Abrir no Terminal Integrado. Também é possível usar o menu Exibir ou Terminal para abrir o painel “Terminal Integrado”.

    Para criar o programa, insira o comando dotnet build no prompt de comando do Terminal.

  11. Corrija todos os erros de compilação relatados antes de continuar.

    Observação

    Por enquanto, é possível ignorar a mensagem de aviso sobre anotherPet ter sido atribuído, mas nunca usado. Posteriormente neste exercício, você adicionará um código que usa anotherPet.

    Se houver algum erro de compilação, lembre-se de que as mensagens de erro e aviso de compilação informam qual é o problema e onde encontrá-lo. Se você atualizar o código, lembre-se de salvar as alterações antes de reconstruí-lo.

  12. Feche o painel do Terminal.

Exibir uma saída de mensagem quando petCount for menor que maxPets

Nesta tarefa, você verifica se petCount é menor que maxPets e, em caso afirmativo, uma mensagem é exibida ao usuário.

  1. Em uma linha de código em branco abaixo do loop for criado, para ver se petCount é menor que maxPets, insira o seguinte código:

    if (petCount < maxPets)
    {
    }
    
  2. Dentro do bloco de código da instrução if, para exibir uma mensagem ao usuário, insira o seguinte código:

    Console.WriteLine($"We currently have {petCount} pets that need homes. We can manage {(maxPets - petCount)} more.");
    

    Os usuários do aplicativo estão prestes a inserir as características do animal de estimação. Esta mensagem fornece um contexto importante.

  3. Reserve um minuto para revisar o branch do código case "2": da instrução switch.

    Aqui, o branch do código case "2": deve ser semelhante ao seguinte código:

    case "2":
        // Add a new animal friend to the ourAnimals array
        string anotherPet = "y";
        int petCount = 0;
        for (int i = 0; i < maxPets; i++)
        {
            if (ourAnimals[i, 0] != "ID #: ")
            {
                    petCount += 1;
            }
    
        }
    
        if (petCount < maxPets)
        {
            Console.WriteLine($"We currently have {petCount} pets that need homes. We can manage {(maxPets - petCount)} more.");
        }
    
        Console.WriteLine("Press the Enter key to continue.");
        readResult = Console.ReadLine();
        break;
    
  4. No menu Arquivo do Visual Studio Code, selecione Salvar.

  5. Abra o painel “Terminal Integrado” no Visual Studio Code e insira o comando para Criar o programa.

  6. Corrija todos os erros de compilação relatados antes de continuar.

    Novamente, é possível ignorar a mensagem de aviso sobre anotherPet ter sido atribuído, mas nunca usado. Na próxima tarefa, você começará a criar o loop while que é usado para inserir os dados de um ou mais animais de estimação. A expressão criada para o loop while usará anotherPet e a mensagem de aviso desaparecerá.

    Lembre-se de que é importante dar a devida atenção às mensagens de aviso, mas elas não o impedirão de executar o programa.

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

    Se seu código não gerar um erro de execução, o menu principal do aplicativo agora deverá ser exibido no painel “Terminal”.

  8. No prompt de comando do Terminal, digite 2

    Esse valor corresponde ao branch do código case "2":.

  9. Verifique se a mensagem a seguir é exibida em “Terminal”.

    We currently have 4 pets that need homes. We can manage 4 more.
    Press the Enter key to continue.
    

    Se você não vir a mensagem esperada, revise o código para identificar e corrigir o problema. Salve as alterações, recompile e execute o aplicativo novamente. Verifique se o código está funcionando conforme o esperado antes de continuar.

  10. No prompt de comando do Terminal, pressione Enter para continuar executando o aplicativo.

  11. Saia do aplicativo e feche o painel “Terminal”.

Criar uma estrutura de loop que será usada para inserir dados da matriz ourAnimals

Nesta tarefa, você criará um loop while que continuará a iteração enquanto anotherPet for igual a y e petCount for menor que maxPets.

  1. No editor de código, crie uma linha de código em branco abaixo do bloco de código if (petCount < maxPets).

  2. Para iniciar o processo de criação do loop while, insira o seguinte código:

    while (anotherPet == "y" && petCount < maxPets)
    {
    }
    
  3. No menu Arquivo do Visual Studio Code, selecione Salvar.

  4. Abra o painel “Terminal Integrado” no Visual Studio Code e insira o comando para Criar o programa.

  5. Observe que você não receberá mais a mensagem de aviso sobre anotherPet não ser usado.

    Se quaisquer erros ou avisos de compilação forem relatados, corrija os problemas antes de continuar.

Verifique a condição de saída para o novo loop de animais de estimação

Nesta tarefa, atualize o bloco de código while (anotherPet == "y" && petCount < maxPets). O novo código incrementa petCount e verifica se petCount é menor que maxPets. Se petCount for menor que maxPets, pergunte ao usuário se ele deseja inserir informações sobre outro animal de estimação e verifique se a resposta é y ou n. Após o bloco de código while (anotherPet == "y" && petCount < maxPets), você verifica o valor de petCount. Se petCount for igual a maxPets, você informará ao usuário que não é possível adicionar mais animais de estimação.

Observação

O código usado para inserir os dados do animal de estimação será desenvolvido no próximo exercício. Por enquanto, petCount é incrementado como se os dados estivessem sendo inseridos e salvos na matriz ourAnimals. Isso permite concluir o desenvolvimento da lógica do código associada ao loop while.

  1. Crie uma linha de código em branco no bloco de código do loop while (anotherPet == "y" && petCount < maxPets) criado na tarefa anterior.

  2. Para incrementar petCount, insira o seguinte código:

    // increment petCount (the array is zero-based, so we increment the counter after adding to the array)
    petCount = petCount + 1;
    
  3. Para verificar se petCount é menor que maxPets, insira o seguinte código:

    // check maxPet limit
    if (petCount < maxPets)
    {
    }
    
  4. No bloco de código da instrução if criada, para perguntar ao usuário se ele deseja adicionar outro animal de estimação, insira o seguinte código:

    // another pet?
    Console.WriteLine("Do you want to enter info for another pet (y/n)");
    
  5. Abaixo da mensagem WriteLine() que você digitou, para ler a resposta do usuário e garantir que ele digitou "y" ou "n", insira o seguinte código:

    do
    {
        readResult = Console.ReadLine();
        if (readResult != null)
        {
            anotherPet = readResult.ToLower();
        }
    
    } while (anotherPet != "y" && anotherPet != "n");
    
  6. Localize a instrução break que separa case "2"; de case "3"; na instrução switch.

  7. Observe as instruções Console.WriteLine() e Console.ReadLine() no final do código case "2";.

    Esse código exibe uma mensagem ao usuário e pausa o aplicativo.

  8. Para incluir as instruções Console.WriteLine() e Console.ReadLine() em uma instrução if, atualize o código da seguinte maneira:

    
    if (petCount >= maxPets)
    {
        Console.WriteLine("Press the Enter key to continue.");
        readResult = Console.ReadLine();
    }
    
    break;
    
    case "3":
    

    O valor de petCount é incrementado no loop while. Se petCount for igual a maxPets, não será possível adicionar mais animais de estimação à matriz ourAnimals. Você deve informar o usuário quando isso ocorrer.

  9. Para informar ao usuário que a Contoso Pets atingiu sua capacidade, atualize o código da seguinte maneira:

    
        if (petCount >= maxPets)
        {
            Console.WriteLine("We have reached our limit on the number of pets that we can manage.");
            Console.WriteLine("Press the Enter key to continue.");
            readResult = Console.ReadLine();
        }
    
        break;
    
    case "3":
    
  10. Reserve um minuto para examinar o código no loop while e a mensagem do usuário que você criou.

    O loop while (anotherPet == "y" && petCount < maxPets) e o código que exibe a mensagem do usuário devem ser semelhantes ao seguinte código:

    while (anotherPet == "y" && petCount < maxPets)
    {
        // increment petCount (the array is zero-based, so we increment the counter after adding to the array)
        petCount = petCount + 1;
    
        // check maxPet limit
        if (petCount < maxPets)
        {
            // another pet?
            Console.WriteLine("Do you want to enter info for another pet (y/n)");
            do
            {
                readResult = Console.ReadLine();
                if (readResult != null)
                {
                    anotherPet = readResult.ToLower();
                }
    
            } while (anotherPet != "y" && anotherPet != "n");
        }
    }
    
    if (petCount >= maxPets)
    {
        Console.WriteLine("We have reached our limit on the number of pets that we can manage.");
        Console.WriteLine("Press the Enter key to continue.");
        readResult = Console.ReadLine();
    }
    
  11. No menu Arquivo do Visual Studio Code, selecione Salvar.

  12. Abra o painel “Terminal Integrado” no Visual Studio Code e insira o comando para Criar o programa.

  13. Corrija quaisquer erros ou avisos de compilação relatados antes de continuar.

Verifique seu trabalho

Nesta tarefa, você executa o aplicativo no Terminal Integrado e verifica se a lógica de loop e branching criada funciona conforme o 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 2

  4. Verifique se você vê as seguintes mensagens:

    We currently have 4 pets that need homes. We can manage 4 more.
    Do you want to enter info for another pet (y/n)
    
  5. No prompt de comando do Terminal, insira n

  6. Verifique se o código saiu do loop para inserir novos animais de estimação quando você inseriu "n".

    Se a lógica do código estiver funcionando conforme o esperado, você verá o menu principal exibido no Terminal.

    Se o código não sair do loop quando esperado, pressione Ctrl + C no Terminal para forçar a interrupção da execução. É preciso percorrer o código manualmente e rastrear os valores das variáveis de critérios de saída. Atualize o código, se necessário, para garantir que você saia do loop while quando o usuário inserir "n". Salve as alterações, recompile o programa e execute o teste de verificação para chegar novamente a este ponto.

  7. No prompt de comando do Terminal, digite 2

    Mais uma vez, você verá as seguintes mensagens exibidas:

    We currently have 4 pets that need homes. We can manage 4 more.
    Do you want to enter info for another pet (y/n)
    
  8. No prompt de comando do Terminal, insira y

  9. Tome algum tempo examinando como petCount é usado no código.

    Você precisa entender a lógica do código antes de validá-lo.

    Nesse caso, a lógica do código depende da relação entre petCount e maxPets. Você sabe que maxPets recebe um valor de 8, mas e petCount? Os seguintes itens ajudam a avaliar a lógica implementada:

    • Você sabe que petCount é 4 quando insere a primeira iteração do loop while.

    • Você sabe que petCount é incrementado sempre que o loop while é iterado.

    • Você sabe que o valor atribuído a petCount e a forma como petCount é incrementado influenciam na maneira como os dados são armazenados na matriz ourAnimals. Os seguintes itens explicam a relação entre petCount e os dados armazenados em ourAnimals:

      • O aplicativo adiciona quatro animais de estimação à matriz ourAnimals quando cria os dados de exemplo.
      • O aplicativo armazena novos dados na matriz ourAnimals quando o valor de petCount é 4. Isso não é um bug. O código faz sentido quando você lembra que os elementos da matriz são baseados em zero. Por exemplo, ourAnimals[0,0] contém a ID do animal de estimação 1 e ourAnimals[3,0] contém a ID do animal de estimação 4. Portanto, quando petCount é4, você armazena dados para o quinto animal de estimação.
      • O aplicativo armazenará os dados de animal de estimação na matriz antes de incrementar petCount.
      • O aplicativo incrementa petCount antes de solicitar ao usuário a adição de outro animal de estimação.
      • Quando o aplicativo exibe o prompt Deseja inserir informações para outro animal de estimação (s/n) pela primeira vez, petCount já está definido como 5.
    • Se o usuário inserir y no primeiro prompt Deseja inserir informações para outro animal de estimação (s/n), você saberá o seguinte:

      • O loop while (anotherPet == "y" && petCount < maxPets) será iterado. Você sabe que o loop será iterado devido a anotherPet == "y" e petCount < maxPets.
      • O valor atribuído a petCount será incrementado (quando o loop while for iterado).
      • O valor atribuído a petCount será 6 (depois que o usuário inserir y na primeira vez).

    Lembre-se dessa análise da lógica do código enquanto continua testando o aplicativo.

  10. Observe que o painel “Terminal” é atualizado com a mesma mensagem "outro animal de estimação?", mas o código não exibe um petCount atualizado.

    O painel “Terminal” agora deve mostrar a seguinte saída:

    We currently have 4 pets that need homes. We can manage 4 more.
    Do you want to enter info for another pet (y/n)
    y
    Do you want to enter info for another pet (y/n)
    
  11. No prompt de comando do Terminal, insira y

    Quando você insere y pela segunda vez, petCount é incrementado para 7. Portanto, petCount ainda é menor que maxPets

  12. No prompt de comando do Terminal, insira y

    Ao inserir y pela terceira vez, petCount é incrementado para 8. Portanto, petCount agora é igual a maxPets

  13. Verifique se o código sai do loop while quando você insere y pela terceira vez.

    O painel “Terminal” agora deve mostrar a seguinte saída:

    We currently have 4 pets that need homes. We can manage 4 more.
    Do you want to enter info for another pet (y/n)
    y
    Do you want to enter info for another pet (y/n)
    y
    Do you want to enter info for another pet (y/n)
    y
    We have reached our limit on the number of pets that we can manage.
    Press the Enter key to continue.
    

    Se o código não sair do loop quando esperado, percorra o código manualmente e rastreie os valores das variáveis de critérios de saída. Atualize o código para garantir que você saia do loop quando petCount atingir um valor igual a maxPets. Continue respondendo "y" até saber que petCount é igual a maxPets, ou seja, que ele tem um valor padrão de 8.

  14. No prompt de comando do Terminal, pressione Enter para continuar executando o aplicativo.

  15. Saia do aplicativo e feche o painel “Terminal”.