Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

Loop infinito, controlando laços e loopings com o while

Usar laços, muitas vezes, pode ser uma tarefa perigosa.
Isso por conta de uma coisa chamada loop infinito.

Acontece sem querer, mas as vezes acontece de propósito...principalmente por pessoas más intencionadas.
Nesse artigo vamos estudar mais sobre esse tipo de loop, como acontecem, como fazer e como ter mais controle sobre laços.

Loop infinito em Java

No nosso estudo sobre o laço while em Java, vimos que ele só é executado se a condição que ele testa, a cada iteração, for verdadeira, e que dentro do código de execução, geralmente, ocorre uma alteração dessa condição para que uma hora ou outra, o laço pare.

Mas, e se o laço não parar? Ele vai rodar infinitamente?
Sim, vai.
Você é o programador. Você diz, o Java faz. Ele não vai te questionar.
E para que alguém iria querer um programa que não parasse?

E se você quiser montar um servidor que vai funcionar 24h/dia para sempre (até parar de funcionar)?
Ora, vai usar um loop sem fim, vai funcionar sempre.
Em muitos programas de pesquisas científicas, os computadores simplesmente não param de calcular. Se programa as tarefas, e deixa-se que elas façam todo o trabalho.

Controlar um laço e deixar o computador em um loop é uma forma de ter um controle maior sobre sua máquina.


Criando um loop infinito simples

public class chato {
    public static void main(String[] args) {
        while(true){
            System.out.println("Loop infinito!");
        }
    }
}
Esse é bem simples de entender.
Qual a condição testada? 'true'? Sim, ela retorna sempre o valor lógico 'true', então o código do while será sempre executado.
Em outras palavras, você pode entender o código como: enquanto 'verdade' -> executar o código

Rode e veja como fica lento.
Para parar o looping, clique no botão vermelho, o sinal universal de 'stop', que aparece na figura:


Apostila de Java completa para download



O que esse laço while faz é simplesmente mostrar, infinitamente, uma mensagem na tela.
Mesmo uma coisa tão simples, é chata. E o pior, prejudicial ao computador.
Embora nossas máquinas atuais sejam bem potentes, ocorre um decréscimo considerável na memória RAM e gera uma lentidão no sistema.

Em sistemas antigos, poderia fazer um estrago.
Loops mais 'sofisticados' podem facilmente travar sua máquina, principalmente se você usar Windows.
Um vírus bem simples de ser criado é criar um loop que gere arquivos de texto, ou que fique adicionando linhas de string a esse arquivo de texto.
Em poucos minutos seu HD estará entupido.


Controlando os laços e looping

No exemplo simples de looping, a condição é sempre verdadeira. Aí não tem muito o que fazer. Ela foi definida assim e vai continuar assim.
Em Java, como em outras linguagens, não usamos esse operador booleano diretamente.
Ao invés disso, declaramos uma variável do tipo 'boolean' que vai definir se o laço deve continuar ou não.
E como isso vai ser decidido? Por você, durante a execução do programa.

No exemplo a seguir, criei a variável 'boolean' chamada 'continuar'. Inicialmente ela é 'true' para o while começar.
Se eu tivesse iniciado ela como 'false' o laço nem iniciaria e não existiria programa.
Declarei um tipo char 'opcao' que vai receber um caractere do usuário. Vai ser tipo uma senha. Só vai escapar do while se o usuário digitar essa senha, ou caractere.

Muito bem, o programa inicia e diz que para você sair da Matrix precisará digitar um caractere especial.
Como você é programador Java, está vendo que no teste condicional a senha é 'j', de java.

Se o usuário adivinhar a letra, o if retorna verdadeiro e altera o valor de 'continuar' para false, aí na próxima iteração o while não irá executar e o programa sai do loop.
Caso ele erre - o que é provável, visto que existem 26 letras e 10 números no teclado - a variável 'continuar', continua sendo true (pois nada foi alterado).

É o seu primeiro programa de 'segurança' em Java, pois exige uma senha. É possível transformar em executável ou inviabilizar que o usuário não veja essa senha, assim só o programador sabe a senha de acesso.
Você pode alterar de 'j' para a inicial de seu nome.

Quando estudarmos Strings, poderemos usar palavras ou frases, em vezes de caractares. Mas calma, já chegaremos lá. Por hora teste esse programe e entenda como funciona, usaremos bastante esse tipo de controle de fluxo em nossas aplicações Java:

import java.util.Scanner;

public class Matrix {
    public static void main(String[] args) {
        boolean continuar = true;
        char opcao;
        Scanner entrada = new Scanner(System.in);
       
        while(continuar){
            System.out.println("Você está na matrix;");
            System.out.print("Digite o caractere especial para sair da matrix: ");
            opcao = entrada.next().charAt(0);
           
            if(opcao=='j'){
                continuar=false;
                System.out.println("Parabéns! Você conseguiu sair da Matrix!");
            }
            else{
                System.out.println("Você não está autorizado a sair da Matrix. Estude Java.");
            };
        }
    }
}

Nenhum comentário:

Contribuir com o Java Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo


Tutoriais de Java