Exercício – Criar loops de iteração do e while
- 10 minutos
No geral, as instruções do-while e while são somente mais uma instrução de iteração por meio de um bloco de código que permite alterar o fluxo de execução do código. No entanto, depois de examinarmos como cada um funciona, podemos identificar melhor as nuances de cada instrução de iteração e quando usá-las.
O que é uma instrução do-while?
A do-while instrução executa uma instrução ou um bloco de instruções enquanto uma expressão booliana especificada é avaliada como true. Como essa expressão é avaliada após cada execução do loop, um loop do-while é executado uma ou mais vezes.
do
{
// This code executes at least one time
} while (true);
O fluxo de execução começa dentro do símbolo de chave. O código é executado pelo menos uma vez e, em seguida, a expressão booliana ao lado da while palavra-chave é avaliada. Se a expressão booliana retornar true, o bloco de código será executado novamente.
Ao codificar duramente a expressão booliana, truecriamos um loop infinito, um loop que nunca terminará, pelo menos, não como está escrito no momento. Precisaríamos de uma maneira de sair do loop dentro do bloco de código. Discutiremos os critérios de saída de um do-while em breve.
Ok, agora vamos preparar nosso ambiente de codificação e começar nosso exame de exemplos de código que implementam uma do-while instrução.
Preparar o ambiente de codificação
Este módulo inclui atividades práticas que orientam você durante o processo de criação e execução do código de demonstração. Recomendamos que você conclua essas atividades usando o Visual Studio Code como seu ambiente de desenvolvimento. Usar o Visual Studio Code nessas atividades ajudará você a se sentir mais confortável escrevendo e executando o código em um ambiente de desenvolvedor usado por profissionais em todo o mundo.
Abra o Visual Studio Code.
Você pode usar o menu Iniciar do Windows (ou recurso equivalente em outro sistema operacional) para abrir o Visual Studio Code.
No menu Arquivo do Visual Studio Code, selecione Abrir Pasta.
Na caixa de diálogo Abrir Pasta, navegue até a pasta Área de Trabalho do Windows.
Caso você tenha um local de pasta diferente onde mantém os projetos de código, você pode usar esse local de pasta. Neste treinamento, o importante é ter um local fácil de localizar e lembrar.
Na caixa de diálogo Abrir Pasta, selecione Selecionar Pasta.
Se aparecer uma caixa de diálogo de segurança perguntando se confia nos autores, selecione Sim.
No Visual Studio Code, no menu Terminal, selecione Novo terminal.
Observe que o prompt de comando no painel Terminal exibe o caminho da pasta atual. Por exemplo:
C:\Users\someuser\Desktop>Observação
Se você estiver trabalhando no próprio computador em vez de em uma área restrita ou em um ambiente hospedado e tiver concluído outros módulos do Microsoft Learn desta série C#, talvez já tenha criado uma pasta de projeto para exemplos de código. Se esse for o caso, você poderá ignorar a próxima etapa, que será usada para criar o aplicativo de console na pasta TestProject.
No prompt de comando terminal, para criar um novo aplicativo de console em uma pasta especificada, insira o seguinte prompt:
dotnet new console -o ./CsharpProjects/TestProjectEste comando da CLI do .NET usa um modelo de programa .NET para criar o novo projeto de aplicativo de console C# no local da pasta especificada. O comando cria as pastas CsharpProjects e TestProject para você e usa TestProject como o nome do arquivo
.csproj.Se uma mensagem for exibida informando que os arquivos já existem, continue com as próximas etapas. Você reutilizará os arquivos de projeto existentes.
No modo de exibição EXPLORER, expanda a pasta CsharpProjects .
Você deverá ver a pasta TestProject e dois arquivos, um arquivo de programa C# chamado Program.cs e um arquivo de projeto em C# chamado TestProject.csproj.
No menu Arquivo do Visual Studio Code, selecione Abrir Pasta.
Na caixa de diálogo Abrir Pasta , selecione a pasta CsharpProjects e selecione Selecionar Pasta.
No modo de exibição EXPLORER, expanda a pasta TestProject e selecione Program.cs.
Exclua as linhas de código existentes.
Você usará esse projeto de console C# para criar, compilar e executar exemplos de código durante este módulo.
Feche o painel do terminal.
Escreva uma instrução do-while para interromper quando um determinado número aleatório for gerado
Vamos escrever um código que continuará gerando números aleatórios entre 1 e 10 até gerarmos o número 7. Pode ser preciso apenas uma iteração para obter um 7, ou pode levar dezenas de iterações.
Verifique se o Visual Studio Code está aberto e se o arquivo Program.cs está sendo exibido no painel do Editor.
Observação
O arquivo Program.cs deve estar vazio. Selecione e exclua todas as linhas de código existentes caso isso não já não tenha sido feito.
Digite o código a seguir no Editor do Visual Studio Code.
Random random = new Random(); int current = 0; do { current = random.Next(1, 11); Console.WriteLine(current); } while (current != 7);No menu Arquivo do Visual Studio Code, selecione Salvar.
O arquivo Program.cs deve ser salvo antes de criar ou executar o código.
No painel EXPLORER, para abrir o Terminal no local da pasta TestProject, clique com o botão direito do mouse em TestProject e selecione Abrir no Terminal Integrado.
Um painel Terminal será aberto. O Terminal deve incluir um prompt de comando mostrando que ele já está aberto no local da pasta TestProject.
No prompt de comando do Terminal, para executar o código, digite dotnet run e pressione Enter.
Observação
Se você vir uma mensagem com a mensagem "Não foi possível encontrar um projeto a ser executado", verifique se o prompt de comando Terminal exibe o local esperado da pasta TestProject. Por exemplo:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Examine a saída.
Como os números gerados são aleatórios, seus resultados serão diferentes. No entanto, o valor
7será o último número a ser impresso, pois a expressão booliana será avaliada parafalsequando 7 for gerado e o fluxo de execução sairá do bloco de código.2 5 8 2 7Reserve um minuto para revisar seu código.
Um aprendizado importante para essa primeira tarefa é que o bloco de código de um
do-whileloop será executado pelo menos uma vez. Poderia iterar um grande número de vezes, e é improvável que saibamos antecipadamente quantas iterações haverá.Também é importante observar que o código dentro do bloco de código está influenciando a continuação ou não continuação da iteração pelo bloco de código. Um bloco de código que influencia os critérios de saída é um motivo principal para selecionar uma
do-whileouwhileinstruções em vez de uma das outras instruções de iteração. Tanto oforeachquanto ofordependem de fatores externos para determinar o número de iterações do bloco de código.
Escrever uma instrução while que faça a iteração somente enquanto um número aleatório for maior que determinado valor
Agora vamos dar uma olhada na declaração while .
Use o Editor do Visual Studio Code para atualizar seu código da seguinte maneira:
Random random = new Random(); int current = random.Next(1, 11); /* do { current = random.Next(1, 11); Console.WriteLine(current); } while (current != 7); */ while (current >= 3) { Console.WriteLine(current); current = random.Next(1, 11); } Console.WriteLine($"Last number: {current}");Observação
Nesse caso, posicionamos a
whilepalavra-chave e a expressão booliana antes do bloco de código. Isso altera o significado do código e atua como um "portão" para permitir que o fluxo de execução só entre se a expressão booleana for avaliada como verdadeira.Salve o arquivo de código e use o Visual Studio Code para executar o código.
Insira
dotnet runno prompt de comando do Terminal para executar o código.Examine os valores de saída listados.
Como os números são aleatórios, o código produzirá uma sequência diferente.
9 7 5 Last number: 1Reserve um minuto para revisar seu código.
No código superior, usamos
randompara inicializar nossaintvariável chamadacurrent. Nossa próxima linha de código ativa é nossawhileinstrução.A instrução
whilefará a iteração com base na expressão booliana(current >= 3). Não sabemos a qual valor será atribuídocurrent, mas há possibilidades que afetam nossowhileloop:- Se
currentfor inicializado para um valor maior ou igual a3, a expressão booliana retornarátruee o fluxo de execução entrará no bloco de código. Dentro do bloco de código, a primeira coisa que fazemos é escrever o valor decurrentno console. Em seguida, ainda dentro do bloco de código, atualizamos o valor decurrentcom um novo valor aleatório. Neste ponto, o controle volta para a parte superior dawhileinstrução em que a expressão booliana é avaliada. Esse processo continua até que a expressão booleana retornefalsee o fluxo de execução saia do bloco de código. - Se
currentfor inicializado (na parte superior do nosso código) para um valor menor que3, a expressão booliana retornaráfalsee o bloco de código nunca será executado.
A linha de código final grava o valor de
currentno console. Esse código é executado independentemente da execução do bloco de código da iteração e permite escrever o valor final decurrentno console.- Se
Use a instrução continue para ir diretamente para a expressão booliana
Em alguns casos, será necessário fazer short-circuit no restante do código no bloco de código e continuar para a próxima iteração. Podemos fazer isso usando a instrução continue .
Use o Editor do Visual Studio Code para atualizar seu código da seguinte maneira:
Random random = new Random(); int current = random.Next(1, 11); do { current = random.Next(1, 11); if (current >= 8) continue; Console.WriteLine(current); } while (current != 7); /* while (current >= 3) { Console.WriteLine(current); current = random.Next(1, 11); } Console.WriteLine($"Last number: {current}"); */Reserve um minuto para revisar seu código.
Observe que retornamos ao
do-while. Umdo-whilegarante que o loop itera pelo menos uma vez.A primeira coisa que fazemos dentro do bloco de código é atribuir um novo valor aleatório a
current. Em seguida, verificamos securrenté maior ou igual a8. Se essa expressão retornartrue, a palavra-chavecontinuetransferirá o controle para o final do bloco de código, ewhileavaliará(current != 7). Portanto, o loop continuará a iterar enquanto o valor decurrentnão for igual a7.A chave desta etapa do exercício é a linha de código que contém a
continuepalavra-chave:if (current >= 8) continue;Como nosso código que grava o valor do
currentconsole está localizado após oif (current >= 8) continue;, nosso código garante que um valorcurrentmaior ou igual a8nunca será gravado na janela de saída.Vamos experimentar.
Salve o arquivo de código e use o Visual Studio Code para executar o código.
Insira
dotnet runno prompt de comando do Terminal para executar o código.Examine os valores de saída listados.
5 1 6 7Você provavelmente verá resultados diferentes do que é exibido abaixo. No entanto, você não verá nenhum valor
8ou maior na janela de saída antes que a execução do código termine com o valor7.Considere a diferença entre as instruções
continueebreak.Como você viu nesta última etapa, a
continueinstrução transfere a execução para o final da iteração atual. Esse comportamento é diferente do comportamento que vimos com a instruçãobreak. Abreakinstrução encerra a iteração (ouswitch) e transfere o controle para a instrução que segue a instrução encerrada. Se não houver nenhuma instrução após a instrução encerrada, o controle será transferido para o final do arquivo ou método.
Recapitular
Há algumas ideias importantes que você deve tirar desta unidade:
- A instrução
do-whilefaz a iteração por meio de um bloco de código pelo menos uma vez e pode continuar realizando esse processo com base em uma expressão Booliana. A avaliação da expressão booliana geralmente depende de algum valor gerado ou recuperado dentro do bloco de código. - A instrução
whileavalia uma expressão booliana primeiro e continua a iteração pelo bloco de código, desde que a expressão booliana seja avaliada comotrue. - A palavra-chave
continuepara passar imediatamente para a expressão booliana.