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

Não compreendi o porquê do contador++ ficar dentro do IF

<meta charset="UTF-8">

<h1>Receitas do Yan</h1>

<script>
    var ingredientes = [];

    var quantidade = parseInt(prompt("Quantos ingredientes você vai adicionar?"));

    var contador = 1;

    while( contador <= quantidade) {

        var achou = false

        var ingrediente = prompt("Informe o ingrediente " + contador);

        for(var numero = 0; numero < quantidade; numero++ ){


            if (ingrediente == ingredientes[numero]){
                achou = true
                break
            }
        }
        if (achou == false){
        ingredientes.push(ingrediente);

        contador++;
        }
    }

    console.log(ingredientes);
</script>
2 respostas

eu revisei algumas vezes porem sempre parece fazer mais sentido logico colocar o contador++ fora do ultimo if

 if (achou == false){
        ingredientes.push(ingrediente);

        contador++;
        }

pois caso já exista o ingrediente dentro do array, o código em questão sera executado e a variável achou ira mudar seu valor para verdadeiro, sendo assim pelo menos na minha cabeça não faz sentido ser possível incrementar a variável contador pois ela só seria executada caso a variável achou recebesse false

 for(var numero = 0; numero < quantidade; numero++ ){


            if (ingrediente == ingredientes[numero]){
                achou = true
                break
            }
  }

Sei que na pratica o código esta totalmente correto porem não compreendi a logica por trás dele

solução!

Olá Igor ! Tudo bem ?

Pelo que entendi, a variavel contador deve ser incrementada somente se for inserido um "novo" ingrediente no array, certo ? Considere a hipótese de tentarmos incluir um ingrediente repetido. Nesse caso, será interrompido o laço "for", a variável "achou" será "true" e o ingrediente não será incluido no array. Se o contador estiver fora do if ele também será incrementado nessa hipótese. Então, o while será finalizado antes que o array tenha a quantidade correta de ingredientes. Tem um outro detalhe, o laço for está comparando a variável "ingrediente" com valores "undefined". Experimente usar ingredientes.length no laço "for":

for(var numero = 0; numero < ingredientes.length; numero++ )