3
respostas

Dúvida, comparação for dentro da função

Pessoal, estou com muita dúvida nesse trecho. No for() dentro do while, como ele pode fazer a comparação entre segredos[posicao] == numeroAleatorio, sendo que ainda não foi atribuído nada à variável segredos? Uma vez que só será atribuído se a variável achou == false?

function sorteiaNumeros(quantidade){

        var segredos = [];

        var numero = 1;

        while(numero <= quantidade) {

            var numeroAleatorio = sorteia();
            var achou = false;

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

                if(segredos[posicao] == numeroAleatorio) {

                    achou = true;
                    break;

                }
            }

            if(achou == false) {

                segredos.push(numeroAleatorio);
                numero++;

            }

        }

        return segredos;

    }
3 respostas

Olá, Lucas! Tudo bem?

Enquanto não for adicionado nenhum valor ao array segredos, não será feita nenhuma comparação no trecho

segredos[posicao] == numeroAleatorio

Isso porque até então o tamanho do array é zero.

Então, não entrará no for, uma vez que a condição de entrar no for é que

posicao < segredos.length

E nessa primeira situação 0 não é menor que 0.

Após adicionado o primeiro número sorteado ao array segredos, o seu tamanho será 1. Assim, a verificação será repetida uma vez (para posição 0).

Na sequência, adicionará mais outro número a variável segredos, logo, quando entrar no for, serão realizadas duas verificações (para posição 0 e 1).

Muito obrigado pela resposta, Rosicley! Nesse caso, na primeira vez que ele executar a função ele vai direto para o if que faz o push, certo? Agora entendi!

Exato!

Ele entrará no for somente quando o tamanho do array for maior que o número que você inicializou a variável posicao, ou seja, quando tamanho do array for maior ou igual a 1.

Então, na primeira vez, ele "pula" direto para o trecho:

if (achou == false) {
        segredos.push(numeroAleatorio);
        numero++;
}