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

porque quando a variável igual é declarada fora do while o while fica num loop infinito, quando se repete um ingrediente?

<meta charset="UTF-8">

<h1>Receitas do Yan</h1>

<script>
    var ingredientes = [];
    var quantidade = parseInt(prompt("Quantos ingredientes você vai adicionar?"));
    var contador = 1;
    var igual =false;

    while(contador <= quantidade){
        var ingrediente = prompt("Informe o ingrediente");
        //var igual = false;

        for(var posicao = 0;posicao <= ingredientes.length;posicao++){
            if(ingrediente == ingredientes[posicao]){
                igual = true;
                break;
            }            
        }
        if(igual == false){
            ingredientes.push(ingrediente)
            contador++;
        }
    }

    document.write(ingredientes)

</script>
4 respostas

Olá Matheus,

Quando um ingrediente é igual a variavel "igual" recebe "true" e isso faz com seu "if" se torne sempre falso e assim o "contador" não é mais incrementado, fazendo seu programa ficar em loop.

Como solução você pode deixar o "contador" fora do "if", assim independente de ser igual ou não ele continua incrementando.

Espero ter ajudando, abraços.

mas quando a variável "igual" recebe true o loop nao deveria ser interrompido e a variável "igual" retornado a ser falso, pois esta no começo do loop ? Desde já agradecido.

for(var posicao = 0;posicao <= ingredientes.length;posicao++){ if(ingrediente == ingredientes[posicao]){ igual = true; break; }

Se eu entendi bem oque acontece, quando o ingrediente é encontrado sua variavel igual vai para true e seu break para o laço FOR não o while, seguindo, como igual = true o programa não entra nessa parte:

if(igual == false){ ingredientes.push(ingrediente) contador++; }

logo seu contador não é incrementado e fica num loop infinito.

quando eu aprendi, me recomendaram a não usar muito o break por que pode ocorrer coisas como essa, tente forçar a parada de outra forma

espero ter entendido e ajudado

solução!

Boa noite, Matheus! Como vai?

Repare que se um ingrediente for repetido, a variável igual recebe o valor true e que depois disso ele nunca mais passa a ser false! Isso acontece pq o único lugar onde essa variável recebe o valor false é logo antes do seu código entrar no laço while! Justamente por isso que declarando a variável igual dentro do while o seu código funcionar como esperado! Portanto, pro seu código funcionar como deveria, vc pode fazer:

<script>
    // código anterior omitido.
    var igual;

    while(contador <= quantidade) {
        igual = false;
        // código posterior omitido.
    }
</script>

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos!