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

Duvida com array de comparação

Abaixo está meu condigo funcionando perfeitamente! Vou deixar minha duvida comentada!

<meta charset="UTF-8">
<input/>
<button>Compara numeros</button>

<script>
    function sorteia(){
        return Math.round(Math.random() * 10);
    }

    function sorteiaNumeros(quantidade){
        var segredos= []; // Onde esse array está sendo incrementado para ser usado no IF como comparação dentro do FOR?
        var n = 1;
        while(n <= quantidade){
            var numeroAleatorio = sorteia(); 
            var achou = false;
            if(numeroAleatorio !== 0){
                for(var i = 0; i < segredos.length; i++){ 
                    if (segredos[i] == numeroAleatorio){// Aqui segredos[] está sendo comparado com numeroAleatorio que recebe o numero criado. Onde ele está sendo incrementado?Ah e não pode ser com a variavel criada segredo (global)  que está recendo a funçao sorteiaNumeros.
                        achou = true;
                        break;
                    }
                }
                if(achou == false){
                    segredos.push(numeroAleatorio);
                    n++;
                }
            }
        }
        return segredos;
    }

    var segredo = sorteiaNumeros(5);
    console.log(segredo);
    var tamanho = segredo.length;
    var input = document.querySelector("input");
    input.focus();

    function verifica(){
        var achou = false;
        for(var i = 0; i <tamanho ; i++){    
            if(input.value == segredo[i]){
                alert("Voce acertou!!");
                achou = true;
                break;
            }
        }
        if (achou == false){
            alert("Voce errou!!");
        }
        input.value = "";
        input.focus();
    }
    var button = document.querySelector("button");
    button.onclick = verifica;
</script>
2 respostas

Oi, Lucas! Tudo bem?

Em relação a dúvida sobre onde o array segredos está sendo incrementado para ser usado no if dentro do for, podemos observar que o array segredos é incrementado dentro do while loop, especificamente na linha onde usamos segredos.push(numeroAleatorio);, o que acontece quando a variável achou é false, ou seja, quando o número aleatório gerado ainda não está no array segredos.

Detalhando o que acontece:

  1. Geração de um número aleatório: var numeroAleatorio = sorteia();
  2. Verificação se o número é zero: if(numeroAleatorio !== 0){
  3. Verificação se o número já está no array segredos:
    • for(var i = 0; i < segredos.length; i++){
    • if (segredos[i] == numeroAleatorio){ achou = true; break; }
  4. Se o número não estiver no array segredos (achou == false):
    • segredos.push(numeroAleatorio); (Aqui o número é adicionado ao array segredos)
    • n++; (Incrementa o contador n)

Portanto, o array segredos é incrementado com novos números aleatórios não repetidos dentro do while loop, na linha segredos.push(numeroAleatorio);.

Espero ter ajudado!

Um forte abraço e bons estudos!

solução!

Perfeito Sarah, vi onde ele estava sendo incrementado depois, mas ficou mais claro com sua explicação, obrigado!

Na primeira interação seu tamanho é igual a zero (com segredos.length) com isso não entra no for, entra a partir da segunda interação que ai ele já está sendo utilizado com o push.