8
respostas

Exercicio do ingrediente deixa cadastrar ingrediente repetido

<meta charset="UTF-8">

<h1>Receitas do Yan</h1>

<script>
//Altere o código para que os ingredientes repetidos não possam ser adicionados

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

Oi, Stones, tudo bem?

Foi um pequeno detalhes despercebido, na linha do loop: for (var posicao=0; posicao<ingredientes.length;posicao++) você inverteu o sinal de menor com o maior, precia ser posicao > ingredientes.length. Assim, o seu código irá funcionar perfeitamente caso tenha ingrediente repetido.

Espero ter te ajudado!

Oi, pessoal. Tenho uma dúvida parecida mas em termos gerais.

Eu não consegui entender como funciona a lógica da coisa toda. Alguem poderia me explicar aonde está a determinação dentro do código que impede um ítem ser repetido?

Olá Wilber, tudo bem com você?

A verificação de itens repetidos ocorre nesse loop:

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

Vamos observar detalhadamente: Existe uma variável chamada existe e quando o código chega nesse loop ele irá comparar o ingrediente com o vetor ( array ) ingredientes, caso já exista ele altera o valor da variável "existe" para true e o que você digitou não será adicionar novamente pois mais para baixo temos esse trecho de código:

if( existe == false) {
    ingredientes.push(ingrediente);
    contador++;
}
  • Caso o item digitado exista, ele não irá entrar dentro do IF, e portanto não será adicionado, esperando que digite um novo ingrediente.
  • Caso o item digitado não exista no vetor ingredientes irá entrar dentro desse IF e será adicionado por meio da função "push".

Entendeu? Posso tentar deixar mais claro caso seja necessário :)

Abraços e Bons Estudos!

Olá amigo. Entendi sim, sua explicação tá ótima. Muito obrigado!! :D

Na verdade, fiquei com uma dúvida.

Na declaração do array "var ingredientes = []", observe que este array não tem parâmetros, ou seja, não tem uma quantidade de ingredientes especificada.

Dentro do laço for "for (var posicao=0; posicao>ingredientes.length;posicao++)", existe a condição, comparando a posicao com a quantidade de caracteres do array ingredientes.

A dúvida é: se o array foi declarado vazio, como o laço estaria fazendo essa comparação?

Obrigado amigos.

Olá Wilber, tudo bem com você?

A dúvida é: se o array foi declarado vazio, como o laço estaria fazendo essa comparação?

Então, acontece que no primeiro ingrediente adicionado ele não entra dentro desse laço, pois o valor de posição é 0, e a quantidade de elementos do array ingredientes também é 0, o que está certo pois é impossível que o primeiro ingrediente adicionado sejá repetido, compreende?

Após o primeiro ingrediente adicionado que realmente começa a verificação, vou dar um exemplo:

Imagine que iremos adicionar 3 Ingredientes: "Chocolate", "Leite Condensado" e "Manteiga"

Ingredientes começa como = [ ]

Ao adicionar o Chocolate não haverá comparação, e no final o array de ingredientes irá ficar: Ingredientes = [ "Chocolate"]

Quando adicionarmos o "Leite Condensado" ele irá percorrer o array de ingredientes ( pois agora posicao = 0 e ingredientes = 1 e irá comparar os ingredientes, como são diferentes, será adicionado: Ingredientes = [ "Chocolate", "Leite Condensado"]

Por fim irá acontecer a mesma coisa com a "Manteiga", ficando: Ingredientes = ["Chocolate", "Leite Condensado", "Manteiga"]

Entendeu? Qualquer coisa estou a disposição :)

Abraços e Bons Estudos!

Perfeito Geovani, agora ficou esclarecido. Muito obrigado mais uma vez!!

Olá, Wilber! Tudo bem? Quem está colocando os ingredientes dentro da array é o "ingredientes.push (ingrediente)" e quem faz essa comparação são os "if's". Quando declaramos:

var ingredientes = [];

esperamos guardar algo dentro dessa array. Todas as vezes em que formos inserindo os ingredientes (conforme a quantidade estipulada no começo do código e que não se repita) ele vai inserindo dentro da array através do:

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

Resumindo: estipulo 03 ingredientes, digito "farinha", passa pelo primeiro if, como não existe dentro da array ele pula para o segundo if e adiciona através do push. Digito "ovos", passa pelo primeiro if, também não existe, vai para o segundo if e adiciona através do push. Digito "farinha" novamente, ele para no primeiro if porque já digitei anteriormente e como lá no início optei por três ingredientes, volto para inserir novamente e adiciono "fermento", pula para o segundo if e é adicionado terminando assim meus três ingredientes. Bom, não sei o que sairá dessa receita rs... Espero ter ajudado, Wilber! Até mais!!!