Exercício - Crie e teste um loop para inserir novos dados do animal de estimação

Concluído

Neste exercício, você desenvolve um código que controla a entrada de novos ourAnimals dados de matriz. Você calcula os valores iniciais de suas variáveis de controle de loop e constrói o loop que coleta dados especificados pelo usuário para os animais. As tarefas detalhadas que você conclui durante este exercício são:

  1. Calcular petCount: escreva um código que conte o número de animais de estimação no array ourAnimals que têm dados atribuídos.
  2. Mensagens condicionais: escreva código para exibir a saída da mensagem quando petCount for menor que maxPets.
  3. Loop externo: construa uma estrutura de loop que será usada para inserir novos ourAnimals dados de matriz.
  4. Critérios de saída: escreva um código que avalie a condição de saída para o ciclo "introduzir novos dados do array ourAnimals".
  5. Teste de verificação: execute testes de verificação para o código desenvolvido neste exercício.

Importante

Você deve completar o exercício anterior neste módulo antes de iniciar este exercício.

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

Nesta tarefa, definem-se os critérios de saída para o ciclo de introdução de dados e cria-se um for ciclo que pode ser usado para contar o número de animais de estimação em ourAnimals que têm 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 switch(menuSelection) instrução e, em seguida, localize a linha de case "2": código.

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

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

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

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

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

    • petCount representa o número de animais com características de animais de companhia atribuídas. Um valor calculado será atribuído fora do loop while e será incrementado por 1 dentro do loop while cada vez que um novo animal for adicionado ao array ourAnimals.

    Importante

    O âmbito das suas variáveis deve ser sempre o mais restrito possível. Na aplicação Contoso Pets, pode definir o escopo petCount ao nível da aplicação em vez de definir o escopo para o bloco de código case "2":. O escopo maior permitiria que você acessasse petCount de qualquer lugar no aplicativo. Se petCount estiver no escopo da aplicação, você pode atribuir-lhe um valor ao criar os dados de exemplo e gerenciar programaticamente seu valor ao longo da aplicação. Por exemplo, quando você encontra um lar para um animal de estimação e remove o animal de estimação da ourAnimals matriz, você pode reduzir petCount em 1. A questão é: em que nível você deve definir o escopo de uma variável quando não tem certeza se ela será usada em outras partes do seu 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 petCount no nível do aplicativo garante que ele esteja disponível se você decidir usá-lo em outro lugar. Talvez você também possa 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 variáveis de escopo ao nível da aplicação quando achar que elas podem ser usadas posteriormente na aplicação? Definir o escopo de variáveis em um nível mais alto do que o necessário pode levar a problemas. O escopo elevado infla os requisitos de recursos do seu aplicativo e pode expô-lo a riscos de segurança desnecessários. À medida que seus aplicativos crescem e se tornam mais complexos, eles exigem mais recursos. Telefones e computadores alocam memória para esses recursos quando eles estão no escopo. À medida que as suas aplicações se tornam mais "reais", tornam-se mais acessíveis. As aplicações são frequentemente acessíveis a partir da nuvem ou de outras aplicações. 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 atuais façam um ótimo trabalho de gerenciamento de recursos e proteção de aplicativos, ainda é uma prática recomendada manter suas variáveis no escopo até o nível em que elas são realmente necessárias. No seu aplicativo Contoso Pets, caso decida usar petCount mais amplamente na aplicação, poderá atualizar o seu código para definir o escopo de petCount num nível superior. Lembre-se de manter suas variáveis com escopo o mais restrito possível e só aumente seu escopo quando for necessário.

  5. Na linha de código abaixo de suas declarações de variável, para criar um loop que itera através dos animais na ourAnimals matriz, insira o seguinte código:

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

    Este código deve parecer familiar. Você usará esse for loop sempre que iterar ourAnimals pela matriz.

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

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

    Mais uma vez, este código deve parecer familiar. Você usará esta if declaração sempre que verificar se as características do animal de estimação foram atribuídas.

  7. Dentro do 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 seu loop concluído for .

    Seu loop concluído for 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 percorrerá a ourAnimals matriz verificando se há dados atribuídos. Quando encontra um animal com dados atribuídos, aumenta petCounter.

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

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

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

    Observação

    Por enquanto, você pode ignorar a mensagem de aviso sobre anotherPet ser atribuído, mas nunca usado. Você adicionará código que utiliza anotherPet mais tarde neste exercício.

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

  12. Feche o painel Terminal.

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

Nesta tarefa, você verifica se petCount é menor do que maxPets e, se for, exibe uma mensagem para o usuário.

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

    if (petCount < maxPets)
    {
    }
    
  2. Dentro do bloco de código da if instrução, para exibir uma mensagem para o usuário, digite 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 rever a ramificação de case "2": código da sua switch declaração.

    Neste ponto, sua case "2": ramificação de código deve se parecer com o 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 Ficheiro do Visual Studio Code, selecione Guardar.

  5. Abra o painel Terminal integrado no Visual Studio Code e digite o comando para compilar seu programa.

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

    Novamente, você pode ignorar a mensagem de aviso sobre anotherPet ser atribuído, mas nunca usado. Na próxima tarefa, você começará a criar o while loop usado para inserir os dados de um ou mais animais de estimação. A expressão que se criar para o ciclo while utilizará anotherPet, e esta mensagem de aviso desaparecerá.

    Lembre-se, as mensagens de aviso são coisas com as quais você deve se preocupar, mas elas não o impedirão de executar seu 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 seu programa.

    Contanto que seu código não gere um erro de tempo de execução, o menu principal do aplicativo agora deve ser exibido no painel Terminal.

  8. No prompt de comando do Terminal, digite 2

    Esse valor corresponde à ramificação do seu case "2": código.

  9. Verifique se a seguinte mensagem é exibida no Terminal.

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

    Se não vir a mensagem esperada apresentada, reveja o código para identificar e corrigir o problema. Salve suas alterações, recrie e execute o aplicativo novamente. Certifique-se de fazer com que o código funcione conforme o esperado antes de continuar.

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

  11. Saia do aplicativo e feche o painel Terminal.

Construa uma estrutura de loop que será usada para inserir novos dados de matriz ourAnimals

Nesta tarefa, cria-se um while loop que contínua a iterar enquanto anotherPet for igual a y e petCount for menor que maxPets.

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

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

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

  4. Abra o painel Terminal integrado no Visual Studio Code e digite o comando para compilar seu programa.

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

    Se algum erro ou aviso de compilação tiver sido relatado, corrija os problemas antes de continuar.

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

Nesta tarefa, atualiza o bloco de código while (anotherPet == "y" && petCount < maxPets). O novo código aumenta petCount e, em seguida, verifica se petCount é menor que maxPets. Se petCount for menor que maxPets, pergunte ao utilizador se deseja inserir informações para 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), verifica o valor de petCount. Se petCount for igual a maxPets, informa o utilizador que não podem ser adicionados mais animais de estimação.

Observação

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

  1. Crie uma linha de código em branco dentro do bloco de código do while (anotherPet == "y" && petCount < maxPets) loop que você criou 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, digite o seguinte código:

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

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

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

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

    Esse código exibe uma mensagem para o usuário e, em seguida, pausa o aplicativo.

  8. Para encerrar as instruções Console.WriteLine() e Console.ReadLine() dentro de 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 dentro do ciclo while. Se petCount for igual a maxPets, não é possível adicionar mais animais de estimação à ourAnimals matriz. Você deve informar o usuário quando isso ocorrer.

  9. Para informar o usuário de que os Animais de Estimação da Contoso atingiram sua capacidade, atualize seu 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 revisar o código em seu while loop e a mensagem de usuário que você criou.

    O seu while (anotherPet == "y" && petCount < maxPets) loop e o código que exibem a mensagem ao utilizador devem ser semelhantes ao código a seguir:

    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 Ficheiro do Visual Studio Code, selecione Guardar.

  12. Abra o painel Terminal integrado no Visual Studio Code e digite o comando para compilar seu programa.

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

Verifique o seu trabalho

Nesta tarefa, você executa nosso aplicativo a partir do Terminal Integrado e verifica se a lógica de looping e ramificação que você criou 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, digite n

  6. Verifique se o seu código sai do loop para inserir novos animais de estimação quando você digitou "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. Você precisa percorrer seu código manualmente e rastrear os valores das variáveis de critérios de saída. Atualize seu código, se necessário, para garantir que você saia do while loop quando o usuário digitar "n". Salve as alterações, reconstrua o programa e execute o teste de verificação para voltar 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, digite y

  9. Reserve um minuto para considerar como petCount é usado em seu código.

    Você precisa entender sua lógica de código antes de poder validar seu código.

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

    • Você sabe que petCount é 4 quando você entra na primeira iteração do while loop.

    • Você sabe que petCount é incrementado cada vez que o ciclo while itera.

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

      • O aplicativo adiciona quatro animais de estimação à ourAnimals matriz quando cria os dados de exemplo.
      • O aplicativo armazena novos dados na ourAnimals matriz 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 o ID do animal de estimação para o animal 1 e ourAnimals[3,0] contém o ID do animal de estimação para o animal 4. Portanto, quando petCount é 4, está a armazenar dados para o quinto animal de estimação.
      • O aplicativo armazenará dados de animais de estimação na matriz antes que ela seja incrementada petCount.
      • A aplicação incrementa petCount antes de pedir ao utilizador para adicionar outro animal de estimação.
      • Quando o aplicativo exibe o prompt Você deseja inserir informações para outro animal de estimação (s/n) pela primeira vez, petCount já está definido como 5.
    • Se o utilizador inserir y na primeira proposta Quer introduzir informações para outro animal de estimação (s/n) você sabe que:

      • O while (anotherPet == "y" && petCount < maxPets) loop será iterado. Sabe que o ciclo irá decorrer porque anotherPet == "y" e petCount < maxPets.
      • O valor atribuído a petCount será incrementado (quando o loop while iterar).
      • O valor atribuído a petCount será 6 (depois que o usuário entrar y pela primeira vez).

    Tenha essa análise da lógica de código em mente enquanto continua testando o aplicativo.

  10. Observe que o painel do Terminal é atualizado com a mesma mensagem "outro animal de estimação?", mas o seu 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, digite y

    Quando você insere y uma segunda vez, petCount é incrementado para 7. Assim petCount é ainda menos do que maxPets

  12. No prompt de comando do Terminal, digite y

    Quando você insere y uma terceira vez, petCount é incrementado para 8. Assim petCount é agora igual a maxPets

  13. Verifica se o teu código sai do while loop quando entrares pela terceira vez em y.

    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 seu 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, que tem um valor padrão de 8.

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

  15. Saia do aplicativo e feche o painel Terminal.