Article image

AG

Adriano Guedin07/02/2024 12:24
Compartilhe

WHILE JAVA

  • #Java

Imagine-se na seguinte situação: você está desenvolvendo um aplicativo que solicita ao usuário seu e-mail e senha, porém a senha será solicitada somente após o email estar correto com o cadastrado no banco do dados.

Então você deve solicitar o email do usuário até que ele acerte, e isso pode não demorar nada como também pode levar muito tempo, mas a grande pergunta é: como desenvolver essa aplicação sem necessidade de utilizar muitas linhas de códigos? 

O que é o While?

While é um laço condicional em java, onde um conjunto de instruções são repetidas enquanto o resultado de uma condição é avaliado. 

Simplificando, o while é uma estrutura de código que repete determinada instrução até que uma condição seja cumprida.

image

Uma expressão é avaliada antes de se executar um conjunto de instruções, enquanto o resultado da expressão for verdadeiro, as instruções dentro do laço serão executadas.

Isso pode gerar um problema, caso a condição seja sempre verdadeira as instruções serão executadas “infinitamente” (infinitamente caso algum evento externo não encerre o programa, como por exemplo falta de memória do dispositivo, fator humano, etc.) gerando o que chamamos de loop infinito.

Vejamos abaixo uma explicação didática e depois veremos o algoritmo e a sintaxe do uso do while.

Imagine agora que você está em sua casa lavando uma pilha de pratos sujos, para que você encerre o processo de lavar os pratos é necessário não ter mais pratos a serem lavados, ou seja: enquanto o numero de pratos sujos for maior que zero, continue lavando os pratos sujos.

Agora vamos representar isso em algoritmo utilizando while, confira abaixo:

iniciaremos uma variável para representar a quantidade de pratos sujos:

int pratos_sujos = 5; 

onde: 

int refere-se ao tipo da variável, neste caso, indicamos que iremos armazenar um valor do tipo inteiro.

pratos_sujos é o nome da nossa variável.

5 é o valor que atribuímos à nossa variável.

= é o simbolo que utilizamos para representar que queremos armazenar o valor dentro da variável.

Com isto, estamos indicando ao programa que temos 5 pratos sujos para serem lavados.

Podemos nos referir à variável pratos_sujos como variável de controle, pois é ela quem vai controlar a execução do while, em breve ficará mais claro essa ideia.

Dando sequência, agora precisamos declarar a condição a ser atingida para que se encerre o processo de lavar os pratos, no caso a condição é lavar os pratos sujos até que a quantidade de pratos sujos seja zero:

int pratos_sujos = 5;

while (pratos_sujos > 0){
    System.out.println("ainda faltam " + pratos_sujos + " pratos");
    pratos_sujos -= 1;
  }

While indica que iremos iniciar um laço condicional.

Dentro de parênteses indicamos a condição a ser avaliada, o programa sempre verificará duas possibilidades: ou a condição é verdadeira (True) ou é falsa (False), se a condição for verdadeira ele executará as instruções contidas dentro das chave {} e caso a condição seja falsa, essa etapa do código será finalizada dando sequencia ao algoritmo.

Dentro das chaves colocamos a instrução do que o programa deve executar caso a condição for verdadeira.

No final da instrução, fazemos com que a variável pratos_sujos diminua um a cada vez que o laço é executado, até que chegue à zero e encerre o loop, caso não tivéssemos alterado o valor ou então tivéssemos acrescentado 1 à variável, esse programa entraria em loop infinito, pois a condição indicada nunca seria falsa. 

O que fizemos:

enquanto (pratos_sujos for maior que 0) faça:

escreva(“ainda faltam " + pratos_sujos + " pratos");

pratos_sujos = pratos_sujos - 1;

Abaixo temos a forma genérica do loop while:

while (< condição a ser avaliada > ){

<instrução a ser executada.>

}

Para testar o código, utilizaremos um compilador online e gratuito, para acessar clique aqui

image

image

Vejamos mais um exemplo:

Contador:

image

image

No exemplo acima nosso contador vai de zero a 4, observe passo a passo o ciclo abaixo:

  nosso contador inicia com 0

  passa pela verificação 0 < 5 = verdadeiro

  então ele entra no bloco de instrução:

    escreve a mensagem variável contador vale (valor do contador (0) atualmente)

    contador = contador + 1 ou seja: contador = 0 + 1 = 1

  agora o nosso contador vale 1

  então o loop volta ao inicio para verificação

  1 < 5 = verdadeiro

  entr no loop:

    escreve a mensagem variável contador vale (valor do contador (1) atualmente)

    contador = contador + 1 ou seja: contador = 1 + 1 = 2

  quando nossa variável estiver valendo 4, ao receber + 1 nossa variável passará a valer 5

  ao executar a verificação novamente ficará:

  5 < 5 = falso, pois 5 é = 5, logo encerrará o loop 

While sem variável de controle

Você pode também iniciar um laço while sem utilizar uma variável de controle, abaixo um exemplo:

image

Para utilizar essa forma, deve-se ter muita cautela, pois é mais propício a gerar um loop infinito.

Abaixo segue explicação do código:

Como já explicado anteriormente, o retorno da condição é true ou false, sendo true ele executa o laço, e sendo false ele encerra.

Nesse modelo nós forçamos a condição ser true, então ela executará as instruções.

Note que como não temos variável de controle, precisamos forçar também a saída do loop, e para isso utilizamos o comando break.

No nosso exemplo queremos que o programa imprima na tela os valores do contador enquanto o valor do contador for menor que 3, e para isso utilizamos o comando if else.

Como o laço executa as instruções até forçarmos a saída, ele executará o if else. No if else definimos que se o contador for menor que 3, ele imprima o valor do contador, mas se o contador não for menor que 3 então ele executará o comando else, onde forçamos a saída do while.

Mas então quando utilizar variável de controle e quando utilizar o método “forçado”?

A forma como utilizar os recursos da ferramenta depende muito do seu objetivo, mas para esse caso posso dar uma dica: se você souber quantas vezes precisa repetir a instrução então utilize variável de controle, caso não saiba ou não tenha um limite especifico utilize o método forçado.

Por exemplo:

Um usuário tem 3 tentativas para acertar senha: utilizar controle de variável.

Um usuário pode inserir seu email até acertar: você pode utilizar método forçado.

Vamos falar um pouco sobre as condicionais do while.

Comparadores como condicionais

Você também pode utilizar comparadores dentro da condicional, e o laço executará enquanto o resultado da comparação for verdadeiro.

Exemplo:

image

Acima temos: enquanto o contador for menor que 3 E tentativa for menor que 5 execute a instrução.

No exemplo abaixo utilizaremos o comparador OU, a diferença é que no OU quando uma condição for satisfeita, o loop encerrará

image

Você pode conferir em mais detalhes tudo o que abordamos aqui e muito mais na documentação oficial do java, basta acessar: https://docs.oracle.com/en/java/

Possíveis problemas ao executar while em java:

Não entra no loop.

Verifique se a condição está correta: 

Caso a condição seja um resultado false, o programa não executará o loop.

Verifique a variável da condição:

Certifique-se de que você utilizou as variáveis corretas e que as escreveu corretamente.

É possível verificar a condição? 

Caso esteja usando comparação como condição, certifique-se de que você não esteja tentando comparar tipos diferentes (String, booleanos e numéricos), isso pode gerar erro de compilação.

Para saber mais sobre como realizar comparações com while, consulte a documentação oficial Java.

Verifique a sintaxe do código:

Verifique se a sintaxe do código está correta: a condição foi colocada entre parênteses? em caso de condições mais complexas foram colocados todos os parênteses ? em caso de comparação na condição foi utilizados os símbolos de comparação corretamente ? 

Não sai do loop.

Problema de loop infinito se dá por conta da condição ser sempre verdadeira, abaixo você encontra possíveis causas e solução.

Verifique se você manipulou a variável corretamente dentro do loop:

Caso esteja tentando realizar uma contagem regressiva, lembre-se de diminuir o valor da variável de controle.

Case esteja tentando realizar uma contagem progressiva, lembre-se de adicionar o valor à variável de controle.

Exemplo de loop infinito:

image

Documentação Oficial java:

Outras fontes: Livro Java 8 - Ensino Didático - Desenvolvimento e Implementação de Aplicações - Sérgio Furgeri

Compartilhe
Comentários (0)