Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Incremento do contador

<meta charset="utf-8">

<h1>Receitas do Yan</h1>

<script>
    var ingredientes = [];

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

    var contador = 1;

    var achou = false;

    while(contador <= quantidade) {

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

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

        if(achou == false) {

            ingredientes.push(ingrediente);

        }

        contador++;
    }

    console.log(ingredientes);

</script>

Ao colocar o incremento do contador dentro do if(achou == false) e repetir um ingrediente ele retorna a mensagem mas quando ponho um ingrediente válido ele ignora e repete a pergunta infinitamente, porém quando ponho o mesmo incremento do outro if ele repete a pergunta quantas vezes pedidas porém caso haja um ingrediente repetido ele simplesmente ignora e só põe no array esse ingrediente uma vez. Dessa forma que fiz está correto ou é preciso que esse incremento fique dentro do "if false"?

1 resposta
solução!

O correto seria o contador++ ficar dentro do if (achou == false), pois quando o javascript interpretar essa frase ele vai varrer a array e verificar se tem algum item igual, caso ele não ache (No caso if (achou == false) ), ele vai adicionar o novo item na array e vai incrementar, assim o loop while pode continuar até a condição ser falsa. Desse modo que você colocou, independente de ter um item duplicado na sua array ele vai incrementar, o que seria um problema, por que uma vez que o ingrediente já existe na array, deveríamos apenas repetir a pergunta para nosso usuário, então só podemos incrementar quando o ingrediente não existir (if (achou == false) ).

Outra coisa, não sei se isso afeta diretamente no código, mas eu declarei a variavel achou dentro do while. Espero ter ajudado, abraços