Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Sobre a atualização de valores.

Quando eu implementei o código dessa forma percebi que a variável boleana "multiploDeTrês" implementada fora do while parecia que não era atualizado o valor da variável número lá dentro dela:

public class MultiploDe3 {

    public static void main(String[] args) {

        int numero = 1;
        boolean multiploDeTrês = (numero % 3) == 0;

        while (numero <= 100) {
            if(multiploDeTrês) {
                System.out.println(numero);    
            }            
            numero++;
        }
    }
}

Não imprimindo nada no console,entretanto ao colocar a variável 'multiploDeTrês' dentro do laço while percebi que ele era atualizado:

public class MultiploDe3 {

    public static void main(String[] args) {

        int numero = 1;

        while (numero <= 100) {
            boolean multiploDeTrês = (numero % 3) == 0;
            if(multiploDeTrês) {
                System.out.println(numero);    
            }            
            numero++;
        }
    }
}

Imprimindo agora os múltiplos de três, com isso eu quero saber que como funciona a atualização de variáveis e se essa atualização ocorre de maneira implícita com o sinal recebe "=",poderia esclarecer essa minha dúvida?

2 respostas
solução!

Olá Pedro,

no primeiro código a variável numero nunca será impressa porque multiploDeTrês foi declarado fora do loop como false. Quando o fluxo de execução entra no loop, a variável multiploDeTrês não é mais alterada, mantendo a condição como false

O que acontece no segundo código é que dessa vez multiploDeTrês está dentro do loop e a cada passada seu valor é alterado, alcançando true, o estado necessário para entrar no loop.

Para exemplificar coloquei um print dentro do while:

        while (numero <= 100) {
            boolean multiploDeTrês = (numero % 3) == 0;
            System.out.printf("Valor de multiploDeTrês: %s, Valor de numero: %d\n", multiploDeTrês, numero);
            if(multiploDeTrês) {
                System.out.println("Imprimindo: " + numero);    
            }            
            numero++;
        }    

Veja o que é impresso a cada loop:

Valor de multiploDeTrês: false, Valor de numero: 1
Valor de multiploDeTrês: false, Valor de numero: 2
Valor de multiploDeTrês: true, Valor de numero: 3
Imprimindo: 3
Valor de multiploDeTrês: false, Valor de numero: 4
Valor de multiploDeTrês: false, Valor de numero: 5
Valor de multiploDeTrês: true, Valor de numero: 6
Imprimindo: 6
Valor de multiploDeTrês: false, Valor de numero: 7
Valor de multiploDeTrês: false, Valor de numero: 8
Valor de multiploDeTrês: true, Valor de numero: 9
Imprimindo: 9
Caso este post tenha te ajudado, por favor, marcar como solucionado. Bons estudos!

Obrigado pela resposta.