2
respostas

Augem, por favor, me explica como funciona essa parte.

aula 9 atividade 8.

eu nem sequer sei explicar o que eu não estou entendendo, mas tipo, segredos.length não deveria ser 0 já que no começo não foi incrementado, além de que não sei qual a função de "segredos[posicao]"


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

                    if(segredos[posicao] == numeroAleatorio){
                        achou = true;
                        break;
                    }

                }
2 respostas

O laço for é um estrutura de repetição, ele ficará repetindo o código até a condição ser falsa. Que condição? A que estiver entre parênteses depois do "for ()". O que essa condição diz? for (var posicao = 0; posicao < segredos.length; posicao++) é tipo "para cada (posição iniciada em 0; enquanto a posição ser menor que o comprimento de segredos; vai somando a posição de um em um). Poxa, mas o que é length? É um método usado para pegar o comprimento de um array/lista, esse comprimento é o número de elementos dentro da lista. Então sabemos que a posição vai aumentar de um em um, e sabemos que o nome do nosso array é segredos, então para acessar os indices/elementos do array fazemos SE SEGREDOS NA POSIÇÃO TAL == numeroAleatorio, então essa parte compara o item no array com o numeroAleatorio, se ser igual, ele termina o laço antes de adicionar na lista, pois não queremos que os elementos dentro do array/lista se repita. Para mais informações tente pesquisar "Laço for com arrays/listas" no YouTube (é mais fácil entender uma estrutura vendo o comportamento do código na prática do que lendo a respeito).

<meta charset="UTF-8">

<input/>
<button>Compare com o meu segredo</button>

<script>
    //Cria uma função que retorna um número aleatório
    function sorteia() { 
       return Math.round(Math.random() * 10);
    }

    //Função que retornará "x" números aleatórios, recebe a quantidade como parâmetro
    function sorteiaNumeros(quantidade) { 
        var segredos = []; //Cria um ARRAY vazio, podemos dizer que um array seria uma lista vazia, sem nenhum item
        var numero = 1; //O laço abaixo vai iniciar a contagem com 1
        while(numero <= quantidade) {
              var numeroAleatorio = sorteia(); //Sorteia
              var achou = false;
              /*Não queremos adicionar o zero, portanto se número ser diferente 
              de zero.
              */
              if (numeroAleatorio !== 0) { 
                     for(var posicao = 0; posicao < segredos.length; posicao++) {
                           /*Lembra do nosso ARRAY? Este código vai varrer os items do array e se achar o mesmo 
                           número terminará antes de adiciona-lo (com o break). No primeiro caso o array estará vazio
                           portanto segredos[posicao] != numeroAleatorio.*/
                           if(segredos[posicao] == numeroAleatorio){
                                achou = true;
                                break;
                           }
                     }
                     if (achou == false) {
                     /*Se o número aleatório ser diferente de zero e já não estiver no array, adiciona no array*/                    
                           segredos.push(numeroAleatorio);
                           numero++;
                     }
              }
        }
        return segredos; //Retorna o array com os números aleatórios
    }

    var segredos = sorteiaNumeros(3); //Cria um array com três elementos de números aleatórios
    console.log(segredos); //Exibe no console para teste do desenvolvedor
    var input = document.querySelector("input"); 
    input.focus(); 
    function verifica() { //Varre o array verificando os elementos, comparando com o valor do input inserido
       var achou = false;
       for(var posicao = 0; posicao < segredos.length; posicao++) {
              if(input.value == segredos[posicao]) {
                     alert("Você ACERTOU!");
                     achou = true;
                     break;
              } 
       }
       if(achou == false) {
              alert("Você ERROU!");
       }
       input.value = "";
       input.focus();
    }

    var button = document.querySelector("button");
    button.onclick = verifica;
</script>

Olá Kevenn!

Então, resumindo aqui, de fato vc está certo, quando não se tem nada incrementado em um lista/array a função "segredos.length" retornará sempre o valor 0. Nesse caso, o bloco do for nem será executado pois não vai entrar na condição em questão (0 < 0 é false) e seguirá para os próximas linhas de códigos, entendeu?

E por último, caso não tenha entendido o funcionamento da função "segredos[posicao]", segredos seria a lista e [posição] seria o índice/posição do elemento dentro da lista propriamente dito.

Bom, espero ter ajudado e tirado sua dívida. Qualquer coisa estamos ai ;)