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

Dúvida com o comando while.

Senhores, na aula 2 exercício 8 percebo uma diferença no resultado quando troco o "while (x >= 1)" pelo "while (x != 1)". A variação do resultado é muito grande. Alguém poderia informar o motivo.

Obrigado,

Segue abaixo o programa:

class LogicaCGR 
{
            public static void main(String[] args) 
              {
                int x = 13;
                int resto = 0;

                    //while (x >= 1) // com esse while o resultado é 4,2,1
                    //while (x != 1) // esse funciona corretamente
                        {
                          if (x % 2 == 0) 
                                {
                                    x = x / 2;
                                } 
                                    else 
                                    {
                                            x = 3 * x + 1;
                                      }
                            System.out.println(x);

                        }
            }
}
3 respostas

Testa colocando a variavel y para poder parar o loop No 10º enlace o resultado de x é 1. usando o while(x != 1) no 10 enlace ele vai parar, pois não atendeu a condição do while. já usando o while(x >= 1) no 10 enlace ele vai continuar, pois 1 é >= 1, e nesse momento entrou em um loop infinito, as ultimas 3 condições sempre dará resultado 4, 2, 1 e a IDE processa muito rápido e não tem memória suficiente para armazenar todas as saídas e vc acaba só vendo os últimos três resultados.

public static void main(String[] args) {

           int x = 13;
           int resto = 0;
           int y = 1;
           //while (x != 1) // esse funciona corretamente    
           while (x >= 1){ // com esse while o resultado é 4,2,1
               if (x % 2 == 0){
                   x = x / 2;
               } else {
                   x = 3 * x + 1;
               }
               y++;
               System.out.println(y + ": " + x);
               if(y == 20)
                   break;
           }
    }
solução!

A diferença acontece pois são comparações diferentes, veja bem:

Quando você usa:

while (x >= 1)

Você esta falando quando x for maior ou igual a 1, ou seja, você esta incluindo o 1 na condição.

Agora:

while (x != 1)"

Você esta falando quando x for diferente de 1, ou seja, você esta excluindo o 1 da condição.

Assim sendo, as duas condições não são iguais, e logicamente apresentarão resultados diferentes.

Ficou claro, obrigado a todos!