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

Não existe ingrediente repetido aqui!

Para o código abaixo fiquei com duvida em relação ao uso do break. Não sei se entendi corretamente, pois para mim ele pareceu redundante, uma vez que a variável criada já garante que o loop será interrompido, pois quando inserimos um ingrediente que já foi informado, a variável é alterada o que garante que o segundo "if" não sera atendido e o código recomece. Caso o meu raciocínio esteja errado, e alguém puder me explicar, agradeço muito.


<meta charset="UTF-8">

<h1>Receitas do Christian</h1>

<script>
    var ingredientes = [];

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

    var contador = 1;

    while(contador <= quantidade) {

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

        var achou = false;

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

            if(ingredientes[posicao] == ingrediente) {

                achou = true;
                alert("Ingrediente já informado, por favor insira um diferente!");
                //testei sem o break e funciona normalmente
                break;

            }

        }

            if(achou == false) {

                   ingredientes.push(ingrediente);
                contador++;

            }

    }

    console.log(ingredientes);
</script>
3 respostas
solução!

Boa noite, Christian! Como vai?

O break se faz necessário pq caso vc não o utilize, o for vai continuar percorrendo o array de ingredientes até o final procurando por um repetido mesmo se já tiver o encontrado numa das primeiras posições!

Exemplo prático:

Suponha que eu tenha o seguinte conjunto de ingredientes:

["banana", "maça", "laranja"]

Daí quero verificar se já tem "banana" no conjunto de ingredientes. Essa verificação é feita no laço for, mas repare que o for varre o array de ingredientes até o fim e "banana" é o primeiro ingrediente! O que acontece é que o break interrompe a busca por um ingrediente repetido no exato momento que ele é encontrado, impedindo que o programa perca tempo indo até o fim do array desnecessariamente. Nesse nosso caso, ele encontraria "banana" logo de cara e interrompe o for na mesma hora!

Conseguiu pegar a ideia?

Grande abraço e bons estudos!

Boa Noite Gabriel! estou muito bem e você?

Muito obrigado pela dica, consegui pegar sim, e fez muito sentido, pois nesse exemplo o fato do programa continuar varrendo o array é insignificante, pois é um programa de baixa complexidade e poucos dados, mas implantando essa ideia em um programa muito complexo, a falta do break pode representar uma espera desnecessária.

Grande abraço!

Tudo ótimo!

É exatamente essa a ideia!

Sempre que tiver qualquer dúvida é só procurar o pessoal aqui no fórum!

Abraço e bons estudos!