Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

O programa pergunta sempre pelo primeiro ingrediente.

O programa fica em loop quando ele pede pra informar o primeiro ingrediente mesmo após ele ser informado, o contador não incrementa.

meta charset="UTF-8">

<h1>Receitas</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);
        console.log(ingredientes);

        var igual = false;

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

            if(ingredientes[posicao] == ingrediente){

                igual = true;
                break;
            }

            if(igual == false){

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

</script>
1 resposta

Boa noite, qual o objetivo do código?

Está em loop, pois a incrementação do contador está dentro do laço de repetição for(posicao = 0; posicao < ingredientes.length; posicao++){ ... }

Na condição do seu for, ele irá repetir até quando a posicao for menor que o tamanho do seu array.

Porém seu array não tem nenhuma informação antes de entrar nesse loop, logo não satisfaz a condição e volta novamente para o while. Pois a posição é igual a 0 e ingredientes.length também é igual a 0

Dessa forma seu contador não recebe a incrementação e nunca sai do seu While

Caso deseja armazenar os ingredientes e exibir no console.log, não precisa do segundo laço de repetição. Ficará assim:

<head>
   <meta charset="utf-8">
   <script>

      var ingredientes = []; // Declara o array

      var quantidade = parseInt(prompt("Quantos ingredientes você vai adicionar?")); // Pergunta quantos ingredientes será adicionado, converte para inteiro e armazena na variável quantidade.

      var contador = 1; // declara o contador e inicializa com o valor 1

      while(contador <= quantidade) { /* A condição é 
enquanto o  contador for menor ou igual a quantidade, ou seja se digitei 3 de quantidade, o loop irá repetir até o contador for igual ou menor que a quantidade.*/ 

            var ingrediente = prompt("Informe o " + contador + "º ingrediente:  "); // Solicita o ingrediente ao usuário e armazena na variável ingrediente concatenando meu contador que nesse momento é 1;
            ingredientes.push(ingrediente); //Adicionar o valor da variável na ultima posição do array.
            contador++; // incrementa o contador, logo no próximo loop ele será 2 e assim por diante
      }

      console.log(ingredientes); // Depois de percorrer todos os loops, exibe o valor do array no console.

   </script>
</head>