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

Loop infinito mesmo com o while correto (ou pelo menos deveria)

Fiz vários, mas vários testes mesmo. Usando o exemplo do número de copas e sempre ia ao infinito.

Reescrevi o arquivo inteiro, copiei dos exemplos, troquei de máquina e mesmo assim, ele não para nunca :/

Percebi que se eu deixar um espaço entre o while e a aberta de bloco (exatamente como o exercicio), como abaixo, ele vai ao infinito:

while(anoCopa <= 2016) {

    alert("Teve copa em " + anoCopa);
    anoCopa = anoCopa + 4;

}

E removendo este, funciona perfeitamente.

Minha dúvida é. Estou maluco? Com o espaço deveria funcionar? Achei estranho pois antes de sair pesquisando mais a fundo, pausei o vídeo e deixei exatamente igual, depois, copiei da transcrição abaixo do vídeo (que também continha o espaço) e a situação se repetiu.

Consegui resolver, mas gostaria de entender o motivo.

Valeuuu galera! Curso bom demais :)

5 respostas

Boa noite Miriel,

Testei o código e ele funciona normalmente, para localizar o erro que causa o loop infinito o ideal seria compartilhar o código completo. essa questão do espaço entre o while não deveria influenciar.

Troquei o alert por um console.log.

código do teste:

var anoCopa = 0;

while(anoCopa <= 2016) {

    console.log("Teve copa em " + anoCopa);
    anoCopa = anoCopa + 4;

}

Abraços

E ai, Vinicius

Como falei, nesse caso eu ajustei removendo o espaço e funcionou, mas esse outro exemplo, o while fica em loop infinito e não consigo achar o motivo.

<meta charset="UTF-8">

<h1>TESTE HTML + JS (IMC APP)</h1>
<br>
PARA FUGIR, CLIQUE <a href="http://google.com">AQUI!</a>
<br><br>

<script>

    function pulaLinha() {

        document.write("<br><br>");
    }

    function mostra(conteudo) {

        document.write(conteudo);
        pulaLinha()

    }


    var contador = 2;
    while(contador <= 10){
        mostra(contador);
      contador = (contador + 2); // incrementa de dois em dois
   }
    mostra("FIM");


</script>

Copiei e colei seu código e ele não gera um loop infinito.

Segue o exemplo.

No seu código abaixo:

while(anoCopa <= 2016) {

    alert("Teve copa em " + anoCopa);
    anoCopa = anoCopa + 4;

}

A razão por se tornar um loop infinito, é porque o Java Script está interpretando a variável abaixo como uma string.

anoCopa 

Quando NÃO inicializamos a variável com um número, a ação nesta linha se torna uma concatenação e não uma adição:

anoCopa = anoCopa + 4;

Neste caso nunca chega ao valor da condição, que é 2016.

solução!

E ai, pessoal

Sério, parece sacanagem uhauhauhau, o problema, desde o principio, não foi o código.... e sim o chrome.

Por algum motivo, mesmo forçando o reload na página com CTRL+F5, ele mantia cache da página web e por em algum momento eu ter errado e gerado o loop, tava ocorrendo de novo.

Descobri simplesmente usando outro navegador e a aba anônima.

Muito obrigado a atenção de todos.

Valeuuu!