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

Estou com dificuldade em entender a forma como são capturados o total de campos através do comando "segredos.length" descrito abaixo, sendo que o parâmetro (3) é atribuído à quantidade.

<script>

    var segredos = sorteiaNumeros(3);

    function sorteia() {

        return(Math.round(Math.random() * 10));
    }

    function sorteiaNumeros(quantidade) {

        var segredos = [];
        var numero = 1;

        while (numero <= quantidade) {
            var numeroAleatorio = sorteia();

            var existe = false;

                if(numeroAleatorio !== 0) {
                    for(var posicao = 0; posicao < segredos.length; posicao++) {
6 respostas

Oi, Simplicio, tudo bem?

Eu poderia ver o problema que está relacionado a questão para entender melhor o código? E o código não está completo, você poderia por o restante?

Oi Laís! Tudo certo?

Abaixo segue o código completo. Minha questão é quando da checagem se o número sorteado for !== de zero é aberto o for e dentro dele existe a condição posicao < segredos.length. De que forma o sistema identifica o tamanho do Array da variável segredos?

<meta charset="UTF-8">

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

<script>
    function sorteia() {

       return Math.round(Math.random() * 10);

    }

    function sorteiaNumeros(quantidade) {

        var segredos = [];

        var numero = 1;

        while(numero <= quantidade) {

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

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

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

                     }

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

        }

        return segredos;

    }

    var segredos = sorteiaNumeros(3);

    console.log(segredos);

    var input = document.querySelector("input");
    input.focus();

    function verifica() {

       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>

Bom dia

Acredito que o valor (3) que é atribuído ao parâmetro (quantidade) da função sorteiaNumeros, também é atribuído ao Array da variável segredos que se encontra na mesma função (function sorteiaNumeros(quantidade)).

Oi, Simplicio, tudo bem?

A ideia de usar o length é ele retornar o numero de unidades de código presente em segredos. O interessante de usa-la ao inves da posição do array:

segredos[5]

é que se por ventura você queira mudar a quantidade , seja aumentar ou diminuir, não precisa mudar no seu for; já que o length faz esse papel.

Espero ter te ajudado!

Oi Laís! está ajudando sim! agradeço muito pela sua disposição. Porém, preciso te incomodar mais um pouco.

Minha pergunta é no seguinte sentido: Como o sistema sabe o "length" (quantidade de campos), da variável segredos, considerando que o Array está vazio? var segredos = [ ].

var segredos = sorteiaNumeros(6); * esta variável fica fora da function sorteiaNumeros. Porém ela chama a função. Será que é dessa forma que é vinculado o parâmetro (6) para a variável segredos [ ] ?

*** O Instrutor Flávio ainda comenta no vídeo que são duas variáveis com o mesmo nome, porém uma não tem ligação com a outra tendo em vista que uma fica dentro da função e a outra não.

solução!

Oi, Simplicio.

Compreendi melhor a dúvida. Na function sorteiaNumeros(quantidade). O array vazio de segredos armazena os dados que o joguinho sorteia em return segredos. Se você fizer o teste e tirar esse return segredos. No console log apresenta undefined, ou seja, não definido, portanto, o for não consgue comparar o segredros com a posição.

Eu interpretei como funcionava o problema a partir do código.

Espero que tenha sanado a dúvida :}