1
resposta

Ahhhh, a receita do Yan!

Passei dias nesse exercício, mas infelizmente não consegui alcançar uma resolução, embora minha última tentativa tenha sido essa:

<meta charset="UTF-8">

<h1>Receitas do Yan</h1>

<script>

    function pulaLinha() {

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

    function mostra(texto) {

        document.write(texto);
    }

    var ingredientes = [];
    var quantidade = parseInt(prompt("Quantos ingredientes você vai adicionar?"));
    var contador = 1;
    var posicao = 0;

    while( posicao <= ingredientes.length && posicao < quantidade ) {

        var ingrediente = prompt("Informe o ingrediente " + contador);
        var verifica = ingredientes[posicao] == ingrediente;

        if(verifica == true) {

            alert("Informe um ingrediente diferente.");
            ingrediente = prompt("Informe o ingrediente " + contador);

        }

        if(verifica == false) {

            ingredientes.push(ingrediente);
            posicao++;
            contador ++;
        }
        if(verifica == undefined) {

            posicao = 0;
        }
      }

    pulaLinha();
    mostra(ingredientes);
    console.log(ingredientes);

</script>

Vendo a resposta:

<h1>Receitas do Yan</h1>

<script>
    var ingredientes = [];

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

    var contador = 1;

    while( contador <= quantidade) {

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

        var existe = false;

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

            if( ingredientes[posicao] == ingrediente) {

                existe = true;
                break;
            }
        }

        if( existe == false) {

            ingredientes.push(ingrediente);
            contador++;
        }
    }

    console.log(ingredientes);
</script>

Tentando entender meu erro, cheguei na conclusão de que errei em como usar as variáveis booleanas, no exemplo de "resposta do instrutor", ele utiliza as variáveis booleanas como um "acessório", da mesma forma que ele utiliza a variável "contador", porém no meu código eu tentei extrair das variáveis "ingredientes" e "ingrediente", além de seus valores indicados no código, valores booleanos, diretamente(Isso é possível?). Se você que teve a disposição de chegar até aqui(desculpe o textão), eu seria muito grato se me ajudasse a entender meu erro, caso eu tenha sido claro em explicá-lo, rs.

1 resposta

Abner, também to começando, mas acho que posso dar uma ajuda

No seu primeiro código, a var verifica sempre será false, por isso que está adicionando todos ingredientes que o usuário envia. Isso está acontecendo porque o teste lógico da linha 25, como está escrito, compara um ingrediente que ainda não foi definido com o ingrediente adicionado pelo usuário. No primeiro loop vai comparar ingredientes[0] (que ainda não existe) com o ingrediente adicionado pelo usuário No segundo loop vai comparar ingredientes[1] (que ainda não existe) com o ingrediente adicionado pelo usuário ... Se você colocar um console.log(ingredientes[posicao]) na linha de baixo fica bem claro

O mesmo erro não ocorre no seu segundo código porque na linha 18, se o ingrediente adicionado for encontrado na lista, ele irá mudar a var existe pra true e não vai adicionar o ingrediente na lista devido ao if da linha 25, fazendo com que volte ao começo do while até o usuário adicionar o numero desejado de ingredientes