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

Dúvida em relação a "for(var posicao = 0; posicao < ingredientes.length; posicao++)"

Fiz o código e rodou normal. A minha dúvida é: Se no ínicio da execução do programa, o vetor 'ingredientes' está vazio (ou seja ingredientes.length é 0), como o laço for é executado, já que 'posicao' inicialmente também é 0 e (0<0) devolve false?

<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);
        var achou = false;

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

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

    }


    for(var contador1 = 0; contador1 < ingredientes.length; contador1++){
        document.write((contador1 + 1) + " - " + ingredientes[contador1] + "<br>");
    }

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

Oi Nóe!

Vê se a minha explicação faz sentido para você:

O que faz o código perguntar quantos ingredientes vai adicionar é o While, o código começa perguntando isso antes de qualquer outra coisa, e o While está definindo um valor para para contador, que é 1 e ele vai perguntar até que o contador tenha o mesmo número que nós escolhemos de quantidade de ingredientes.

Logo depois o nosso código tem o laço for pra ser executado, e realmente não temos nada ainda no nosso array, então acredito que realmente o laço que não tem nenhuma posição preenchida, nunca irá atribuir para a variável: achou = true;

Acho que aqui a gente consegue perceber que o for é uma ação isolada.

Logo depois temos o if que independe desse for, e nele a única coisa que ele quer ter certeza é que: achou != true, se esse critério for atendido, se a variável "achou" contrinua sendo false então ele faz um push e insere o primeiro item no ingrediente. A partir desse momeno o array ingredientes possui 1 elemento, ele vai estar no index (posição) zero, mas o array reconhece que tem aqui pelo menos 1 ponto de length e a partir desse momento ele já começa a validar o laço do for, porque por mais que tenha apenas 1 elemento, ainda sim 1 é maior do que zero, é claro que por ser o primeiro valor, não tem como ter uma repetição, então o laço for não vai atribuir para a variável o valor de true, até que você passe um ingrediente repetido.

Então, se a gente ver passo a passo fica mais fácil:

1- A variável ACHOU está como 'false'.

2- O sistema irá verificar a condição do FOR.

3- Dentro do FOR só tem um IF a ser executado

4- Quando adiciona o primeiro ingrediente.

A condição para executar o FOR não é atendida, pois a condição era posicao = 0 < ingredientes = 0

5- Como o FOR não foi executado e por consequência o IF tbm não é executado.

6- Sai da condição FOR

7- Como não foi executado o FOR e nem o IF, então a variável ACHOU se manteve 'false'

8 - O segundo IF (que está fora da condição do FOR) é executado, pois a condição do IF é verdadeira if(achou == false).

  • Com isso o primeiro item é adicionado;

  • O contador passa para 1;

  • Reinicia o while

  • Daí em diante a condição FOR passa a ser executada, pq a lista de ingredientes ganhou 1 item e a condição passa a ser verdadeira posicao = 0 < ingredientes = 1.

Resumindo: O FOR serve para verificar se o item é repetido. Da forma que está escrito o código ele não confere o primeiro item, pois não faria sentido conferir repetição do primeiro item de uma lista vazia.

Espero te ajudado. Sucesso na sua jornada!!

Olá, Edith e Diógenes! Muito obrigado, por responder a minha dúvida! Eu entendi que na primeira iteração do 'while', o 'for' não é executado. Só depois que é adicionado o primeiro ingrediente no vetor 'ingredientes' é que o 'for' passa a ser executado. Mais uma vez agradeço a ajuda de vocês e desejo sucesso para todos nós! Vlw!