9
respostas

Não consigo finalizar - Exercício do Yan - Ingrediente repetido - Onde estou errando?

Pessoal, alguém poderia me ajudar, por gentileza?

Estou na parte final do curso de lógica, naqueles últimos exercícios antes de ir para o Projeto Final.

No exercício do Yan, devo alterar o código para que este não aceite ingredientes repetidos. Eu modifiquei o código, mas ele está retornando resultados estranhos.

Segue o código:

<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 + "/" + quantidade);

        var ingredienteRepetido = [];
        if(quantidade =! 0) {

            for(var repetido = 0; repetido < quantidade.length; repetido++) {

                if(ingrediente[repetido] == ingredienteRepetido) {
                    ingredienteRepetido = true;
                    break;

                }
            }

            if(ingredienteRepetido == false) { 

                ingredientes.push(ingrediente);
            }

        }

        ingredientes.push(ingrediente);

        contador++;
    }

    console.log(ingredientes);
</script>

Com o código acima, se digito, por exemplo, que quero 2 ingredientes, ele aceita os dois.

Porém, de forma estranha, pede apenas uma vez, e no console do desenvolvedor, vejo que entraram duas vezes seguidas o mesmo ingrediente.

Onde está o erro, ou os erros, por gentileza?

Grato.

9 respostas

a variável ingredienteRepetido não é um array, deveria ser um booleano apenas para verificar se existe ingrediente repetido ou não. O próximo ponto é alterar a instrução abaixo: for(var repetido = 0; repetido < quantidade.length; repetido++) {

            if(ingrediente[repetido] == ingredienteRepetido) {
                ingredienteRepetido = true;
                break;

            }

você tem que informar o tamanho do espaço do array no caso ingredientes.length e logo abai no if você verifica ingredientes[repetido] == ingrediente (que é a variável que você quer verificar se existe).

No final:

    ingredientes.push(ingrediente);

    contador++;

você está adicionando o ingrediente no array independente de qualquer coisa, essa linha precisa se retirada, você só pode adicionar desde que o ingrediente não exista e por fim você só pode aumentar o contador desde que não seja repetido, passando o contador++ para dentro do if que verifica se o ingredienteRepetido == false.

Acredito que isso resolva o problema, espero ter ajudado, qualquer coisa dá um toque

Olá Ivo.

Muito obrigado. :)

Então, até tentei alterar algumas coisas seguindo suas instruções, mas continua igual. :(

Agora ficou assim, mas agora o console nem loga mais o que digitei nos alerts...rsrs

<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 + "/" + quantidade);

        var ingredienteRepetido = false;
        if(quantidade =! 0) {
            contador++;

             for(var repetido = 0; repetido < quantidade.length; repetido++) {
                if(ingrediente[repetido] == ingredienteRepetido) {
                ingredienteRepetido = true;
                break;

                }
            }
        }
  }

    console.log(ingredientes);
</script>

Então Marcos, você tirou a instrução que adiciona os ingredientes para a lista depois do for

if(ingredienteRepetido == false) { 

                ingredientes.push(ingrediente);
            }

e seu ingrediente[repetido] não existe, pois ingrediente é uma variável que recebe o valor digitado pelo usuário, o certo seria ingredientes[repetido] que é o primeiro array que você criou, isso dentro da instrução do primeiro if, dentro do for.

Oi Ivo, desculpe por estar te perturbando por aqui, viu. E muito obrigado pela ajuda. :)

No caso, não entendi muito bem. Olha como ficou agora.

<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 + "/" + quantidade);

        var ingredienteRepetido = false;
        if(quantidade =! 0) {
            contador++;

             for(var repetido = 0; repetido < quantidade.length; repetido++) {
                if(ingredientes[repetido] == ingredienteRepetido) {
                ingredienteRepetido = true;
                break;

                }
            }
        }

        ingredientes.push(ingrediente);
  }

    console.log(ingredientes);
</script>

Não tem problema algum Marcos, talvez eu não esteja sendo claro rsrs, se quiser fique a vontade para me chamar no whatsapp 11948462005, por lá respondo mais rápido, segue o código corrigido:

<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 + "/" + quantidade);
        var ingredienteRepetido = false;
        if(quantidade != 0) {
             for(var repetido = 0; repetido < ingredientes.length; repetido++) {
                if(ingredientes[repetido] == ingredienteRepetido) {
                ingredienteRepetido = true;
                break;

                }
            }
        }

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

    console.log(ingredientes);
</script>

Corrigi alguns errinhos, no if(quantidade != 0) estava trocado, estava (=!) esse era um dos motivos, também faltou voltar a instrução do if no final do código para que verifique se não existir você add na lista, você pode fazer o if assim também:

if(!ingredienteRepetido){

}

é o mesmo que if(ingredienteRepetido == false), fica mais legível, também alterei dentro do for, a quantidade até funcionaria, porém o for está percorrendo seu array, se você tem 2 itens adicionados, você vai percorrer o for 2 vezes apenas, porém se você coloca a quantidade, independente de quantas posições estiverem no seu array, ele vai repetir até o número de quantidade, deixa menos performático e também evita o número da quantidade ser menor que o número de posições do array, resumindo, dessa forma garante que o for percorra todas as posições do array. Bom espero ter ajudado, e qualquer dúvida fique à vontade para me chamar no whatsapp, abraço!!

Agora acho que entendi, meu caro. Muitíssimo obrigado. :)

Acho que deu certo!

Maravilha!!

Valeu mesmo!