Exercício – Criar e testar um loop para inserir novos dados de animal de estimação
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:
- Calcular petCount: escreva o código que conta o número de animais de estimação na matriz
ourAnimalscom dados atribuídos. - Mensagens condicionais: escreva o código para exibir a saída da mensagem quando
petCountfor menor quemaxPets. - Loop externo: crie uma estrutura de loop que será usada para inserir novos dados da matriz
ourAnimals. - 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".
- 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.
Verifique se o Visual Studio Code está aberto e se o arquivo Program.cs está visível no Editor.
Localize a instrução
switch(menuSelection)e localize a linha de códigocase "2":.Localize a instrução
Console.WriteLine()que exibe a mensagem "em breve" e substitua-a por uma linha de código em branco.Na linha de código em branco que você criou, para declarar as variáveis
anotherPetepetCount, insira o seguinte código:string anotherPet = "y"; int petCount = 0;Essas duas variáveis controlam a iteração de um loop
whileque é 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 deyanterior ao início do loopwhile. Ele receberá um valor atribuído pelo usuário,youn, dentro do loopwhile.petCountrepresenta o número de animais com características de animais de estimação atribuídas. Receberá um valor calculado fora do loopwhilee será incrementado em1dentro do loopwhilesempre que um novo animal for adicionado à matrizourAnimals.
Importante
O escopo de suas variáveis deve ser sempre o mais estreito possível. No aplicativo Contoso Pets, é possível definir o escopo
petCountno nível do aplicativo em vez de no bloco de códigocase "2":. O escopo maior permite o acesso apetCountde qualquer lugar no aplicativo. SepetCountteve 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 matrizourAnimals, é possível reduzirpetCountpor1. 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 escopopetCountno nível do aplicativo, mesmo que você não o esteja usando em nenhum outro lugar. Afinal, o escopo depetCountno 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 usarpetCountde maneira mais ampla, atualize o código para um escopopetCountem 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.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
forsempre que fizer a iteração na matrizourAnimals.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
ifsempre que verificar se as características do animal de estimação foram atribuídas.No bloco de código do
ifque você criou, para incrementarpetCountem 1, digite o seguinte código:petCount += 1;Reserve um minuto para examinar o loop
forconcluído.Seu loop
forconcluí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
ourAnimalsverificando os dados atribuídos. Ao encontrar um animal com os dados atribuídos, ele incrementapetCounter.No menu Arquivo do Visual Studio Code, selecione Salvar.
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 buildno prompt de comando do Terminal.Corrija todos os erros de compilação relatados antes de continuar.
Observação
Por enquanto, é possível ignorar a mensagem de aviso sobre
anotherPetter sido atribuído, mas nunca usado. Posteriormente neste exercício, você adicionará um código que usaanotherPet.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.
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.
Em uma linha de código em branco abaixo do loop
forcriado, para ver sepetCounté menor quemaxPets, insira o seguinte código:if (petCount < maxPets) { }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.
Reserve um minuto para revisar o branch do código
case "2":da instruçãoswitch.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;No menu Arquivo do Visual Studio Code, selecione Salvar.
Abra o painel “Terminal Integrado” no Visual Studio Code e insira o comando para Criar o programa.
Corrija todos os erros de compilação relatados antes de continuar.
Novamente, é possível ignorar a mensagem de aviso sobre
anotherPetter sido atribuído, mas nunca usado. Na próxima tarefa, você começará a criar o loopwhileque é usado para inserir os dados de um ou mais animais de estimação. A expressão criada para o loopwhileusaráanotherPete 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.
No prompt de comando do Terminal, digite o comando para executar o programa.
Digite o comando
dotnet runno 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”.
No prompt de comando do Terminal, digite 2
Esse valor corresponde ao branch do código
case "2":.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.
No prompt de comando do Terminal, pressione Enter para continuar executando o aplicativo.
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.
No editor de código, crie uma linha de código em branco abaixo do bloco de código
if (petCount < maxPets).Para iniciar o processo de criação do loop
while, insira o seguinte código:while (anotherPet == "y" && petCount < maxPets) { }No menu Arquivo do Visual Studio Code, selecione Salvar.
Abra o painel “Terminal Integrado” no Visual Studio Code e insira o comando para Criar o programa.
Observe que você não receberá mais a mensagem de aviso sobre
anotherPetnã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.
Crie uma linha de código em branco no bloco de código do loop
while (anotherPet == "y" && petCount < maxPets)criado na tarefa anterior.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;Para verificar se
petCounté menor quemaxPets, insira o seguinte código:// check maxPet limit if (petCount < maxPets) { }No bloco de código da instrução
ifcriada, 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)");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");Localize a instrução
breakque separacase "2";decase "3";na instruçãoswitch.Observe as instruções
Console.WriteLine()eConsole.ReadLine()no final do códigocase "2";.Esse código exibe uma mensagem ao usuário e pausa o aplicativo.
Para incluir as instruções
Console.WriteLine()eConsole.ReadLine()em uma instruçãoif, 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 loopwhile. SepetCountfor igual amaxPets, não será possível adicionar mais animais de estimação à matrizourAnimals. Você deve informar o usuário quando isso ocorrer.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":Reserve um minuto para examinar o código no loop
whilee 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(); }No menu Arquivo do Visual Studio Code, selecione Salvar.
Abra o painel “Terminal Integrado” no Visual Studio Code e insira o comando para Criar o programa.
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.
Se necessário, abra o painel Terminal Integrado do Visual Studio Code.
No prompt de comando do Terminal, digite dotnet run
No prompt de comando do Terminal, digite 2
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)No prompt de comando do Terminal, insira n
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
whilequando 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.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)No prompt de comando do Terminal, insira y
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
petCountemaxPets. Você sabe quemaxPetsrecebe um valor de8, mas epetCount? Os seguintes itens ajudam a avaliar a lógica implementada:Você sabe que
petCounté4quando insere a primeira iteração do loopwhile.Você sabe que
petCounté incrementado sempre que o loopwhileé iterado.Você sabe que o valor atribuído a
petCounte a forma comopetCounté incrementado influenciam na maneira como os dados são armazenados na matrizourAnimals. Os seguintes itens explicam a relação entrepetCounte os dados armazenados emourAnimals:- O aplicativo adiciona quatro animais de estimação à matriz
ourAnimalsquando cria os dados de exemplo. - O aplicativo armazena novos dados na matriz
ourAnimalsquando o valor depetCounté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ção1eourAnimals[3,0]contém a ID do animal de estimação4. Portanto, quandopetCounté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
petCountantes 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,
petCountjá está definido como5.
- O aplicativo adiciona quatro animais de estimação à matriz
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 aanotherPet == "y"epetCount < maxPets. - O valor atribuído a
petCountserá incrementado (quando o loopwhilefor iterado). - O valor atribuído a
petCountserá6(depois que o usuário inserir y na primeira vez).
- O loop
Lembre-se dessa análise da lógica do código enquanto continua testando o aplicativo.
Observe que o painel “Terminal” é atualizado com a mesma mensagem "outro animal de estimação?", mas o código não exibe um
petCountatualizado.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)No prompt de comando do Terminal, insira y
Quando você insere
ypela segunda vez,petCounté incrementado para7. Portanto,petCountainda é menor quemaxPetsNo prompt de comando do Terminal, insira y
Ao inserir
ypela terceira vez,petCounté incrementado para8. Portanto,petCountagora é igual amaxPetsVerifique se o código sai do loop
whilequando 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
petCountatingir um valor igual amaxPets. Continue respondendo "y" até saber quepetCounté igual amaxPets, ou seja, que ele tem um valor padrão de8.No prompt de comando do Terminal, pressione Enter para continuar executando o aplicativo.
Saia do aplicativo e feche o painel “Terminal”.