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

Estou com dificuldades nesse exercício, parece que o navegador parou

<meta charset="utf-8">
<script>
    function pulaLinha() {
        document.write("<br><br>")
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha(); 
    }

    //Função: Imprima todos os números entre 30 e 40 inclusive eles exceto 33 e 37, use while e if.

    var contador = 30;

    while (contador <= 40) {
        mostra(contador);
        if (contador != 33 && contador != 37) {
            contador = contador + 1;
        }


    }


    mostra("FIM");
</script>
4 respostas
solução!

Oi Vinicius, o navegador não parou, o que aconteceu foi que ele entrou em um loop infinito. Isso aconteceu por causa desse trecho:

 if (contador != 33 && contador != 37) {
            contador = contador + 1;
        }

Ele só vai somar mais um ao contador caso o próprio contador seja diferente de 33 e 37, mas repare que quando ele chegar ao 33 ele nunca vai somar mais um, assim nunca completando o while. Para resolver isso basta tirar o contador = contador + 1 dentro do if, já que você fez essa condição creio que você não queira mostrar na tela quando o contador for igual a 33 ou 37 então vamos mudar o mostra(contador) de lugar também, ok? Deixe assim

    while (contador <= 40) {
        if (contador != 33 && contador != 37) {
            mostra(contador);
        }
            contador = contador + 1;
    }

O código entrou em LOOP infinito porque você colocou o "incremento" dentro do IF.

O correto é :

  while (contador <= 40) {
        if (contador != 33 && contador != 37) {
            mostra(contador);            
        }
        contador = contador + 1; // Incrementa o valor

    }

uma duvida, nao estou entendendo a logica, o porque q esse trecho tira os numeros 33 e 37, oq faz ele tirar ele na contagem? grato

if( contador != 33 && contador != 37) { mostra(contador); }

Oi Leandro, os números 33 e 37 não aparecem porque você chama a função mostra dentro desse if, o que esse if está dizendo é: Se o contador for diferente de 33 e 37 então mostra o contador. Pra ficar mais claro vamos simular esse while e o if.

O contador começa com 30 ai ele chega no while, no while ele vai verificar: 30 é menor ou igual a 40? Sim, então ele entra no while, dentro do while ele chega no if e então ele faz outra verificação: o contador (30) é diferente que 33? sim (true) e ele também é diferente que 37? sim (true), ambos os valores sendo true ele entra dentro do if e chama a função mostra que vai passar o valor do contador e assim mostrar na tela, então ele sai do if e soma mais um ao contador que passa a ser 31 e assim vai indo, certo?

Vamos dar um pulo aqui, o contador agora recebe 33. No while, 33 é menor ou igual a 40? Sim, entra no while. Chegando no if, o contador (33) é diferente que 33? Não (false) eles são iguais, contador é diferente que 37? Sim (true), mas já que usamos o && no if, para ele entrar dentro do bloco ambos os valores precisam ser verdadeiros, já que um dos valores são falsos ele não entra no if e apenas soma mais um ao contador que passa a ser 34 que vai fazer a verificação de novo no while, vai fazer a verificação de novo no if e assim até acabar a contagem.

Deu para entender? Qualquer coisa você pode abrir um tópico no fórum com a sua duvida.