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.
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
Vejamos mais um exemplo:
Contador:
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:
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:
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á
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:
Documentação Oficial java:
Outras fontes: Livro Java 8 - Ensino Didático - Desenvolvimento e Implementação de Aplicações - Sérgio Furgeri