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

Exercício da Receita - Módulo 9 do curso Lógica de Programação I

Olá! To com um problema na resolução do exercício da receita, proposto no módulo 9 do curso de Lógica de Programação. O programa funciona normalmente, inclusive identifica quando foi digitado um item repetido, porém após exibir o alert(), por algum motivo da pau! :/

Onde será que estou errando na minha lógica? Obrigado.

    <script>

        //Vetor que guarda os itens.
        var ingredientes = [];

        //Variável que guarda quantos itens que serão adicionados no vetor igredientes.
        var quantidade = parseInt(prompt("Quantos ingredientes você vai adicionar?"));

        //Variável de verificação.
        var verifica = true;

        //Laço para guardar os itens s no vetor.
        for (var contador1 = 1; contador1 <= quantidade; contador1++){
            var item = prompt("Informe o "+contador1+"º item: ");

            /*Laço que verifica se o item digitado já existe ou não no vetor ingredientes. Caso exista, exibe alerta e muda o valor da variável de verificação para false.*/

            for (var contador2 = 0; contador2 < ingredientes.length || verifica != true; contador2++){
                if (item == ingredientes[contador2]) {
                    alert("Item já adicionado!");
                    verifica = false;
                }
            }

            //Condicional que quarda o item digitado na primeira iteração.
            if (contador1 == 1 && verifica == true){
                ingredientes.push(item);
            }

            //Condicional que guarda o item após a primeira iteração e caso ele não seja repetido.
            if (contador1 != 1 && verifica == true){
                ingredientes.push(item);
            }

            //Condicional decrementa a variável contador1, caso o item digitado seja repetido e após a primeira iteração. 
            if (contador1 != 1 && verifica == false) {
                contador1--;
                verifica = true;
            }
         }

       console.log(ingredientes);

    </script>
2 respostas

Ok, consegui resolver. O problema situava-se na minha lógica mesmo. Poderia ser feito de forma bem mais simples e sem necessidade de tantos if(s).

Cheguei no seguinte código:

<script>

        //Vetor que guarda os itens.
        var ingredientes = [];

        //Variável que guarda quantos itens serão adicionados no vetor ingredientes.
        var quantidade = parseInt(prompt("Quantos ingredientes você vai adicionar?"));

        //Laço para guardar os itens s no vetor.
        for (var contador1 = 1; contador1 <= quantidade; contador1++){
            var item = prompt("Informe o "+contador1+"º item: ");

            //Variável de verificação.
            var verifica = true;

            /*Laço que verifica se o item digitado já existe ou não no vetor ingredientes. Caso exista, exibe alerta e muda o valor da variável verifica para false.*/
            for (var contador2 = 0; contador2 < ingredientes.length; contador2++){
                if (item == ingredientes[contador2]) {
                    alert("Item já adicionado!");
                    verifica = false;
                    contador1--;
                    break;
                }
            }

            if (verifica == true){
                ingredientes.push(item);
            }
        }

       console.log(ingredientes);

    </script>
solução!

Olá Leonardo, tudo bem?

Sua lógica está correta, só está faltando adicionar um break depois que aparece o alert para que o bloco de código do for termine quando o ingrediente adicionado já exista. Sem o break o seu código fica em "loop infinito":

for (var contador2 = 0; contador2 < ingredientes.length || verifica != true; contador2++){
     if (item == ingredientes[contador2]) {
          alert("Item já adicionado!");
          verifica = false;
          break
     }
}