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

10.Não existe ingrediente repetido aqui!

Meu programa está com o erro de repetir o último ingrediente quando o cliente coloca, ficando a quantidade maior do que a que o cliente informou.

<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 ingrediente = prompt("Informe o ingrediente " + contador);

        var existe = false;

        ingredientes.push(ingrediente);

        contador++;

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

            if(ingredientes[posicao] == ingrediente) {

                existe = true;
                break;
            }

            if(existe == false) {

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

    console.log(ingredientes);

</script>
8 respostas

Oi Paulo, tudo bem?

Realmente, seu código não está realizando a função esperada. Isso está acontecendo por dois motivos: O primeiro, é porque você está puxando o contador duas vezes, o correto seria só uma (remova após o var existe = false, e deixe apenas o contador após o if existe = false).

O segundo motivo, você esqueceu de dar a posição para a variável (esqueceu de colocar o var dentro do for), isso é muito importante já que você está definindo uma condição de repetição, se algo está errado na sua condição, ou a repetição não para nunca ou ela vai guardando as informações e elas aparecem só no final do código, e isso não é o esperado.

Para corrigir esse problema, basta alterar seu código adicionando as correções, da seguinte forma:

 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++;
        }
    }

Entendeu? Dessa forma, seu código vai funcionar corretamente. Espero ter te ajudado, e bons estudos!

Isabella, fiz a alteração que você falou. Porém, depois que ele pede para pessoa responder quantos ingredientes vão ser colocados, ele fica só repetindo o pedido do ingrediente 1... :-(

<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 ingrediente = prompt("Informe o ingrediente " + contador);

        var existe = false;

        ingredientes.push(ingrediente);

        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>

Oi Paulo, você ainda precisa remover esse

ingredientes.push(ingrediente);

Que sobrou após o trecho var existe = false.

Testa mais uma vez, e me avisa se funcionar =)

Eu tirei, mas o diacho continua direto pedindo o ingrediente 1. Programa teimoso!

<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 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>

Olá Paulo,

O erro está no fechamento da instrução for. Ele tem que vir antes do segundo if.

solução!

O código dentro do while ficaria assim:

 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++;
                }     
    }

Testa aí e nos diga se deu certo.

André Alexandre, um detalhe de nada que fez toda a diferença! Foi apenas falta de atenção minha! Coloquei o fechamento no local errado! Agora deu certo!! Finalmente!! Obrigado de novo por sua ajuda!! Obrigado também por sua ajuda, Isabella!