1
resposta

Dúvida manipulando array com laço for

Na aula manipulando array, eu tentei criar uma lista usando o laço for. Assim que o usuário definir o tamanho da lista, é gerado um número aleatório para cada posição da lista. Porém o resultado é uma lista com números em ordem crescente e não números aleatórios. Por exemplo: se tamanho da lista = 5;

                     segredos[0] = 1;
                     segredos[1] = 2;
                     segredos[2] = 3;
                     segredos[3] = 4;
                     segredos[4] = 5;

Alguém pode me explicar por que isto está acontecendo?

<meta charset="utf-8">

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


<script>

    var segredos = [];
    var tamanho = 5;


    for(var indice = 0; indice < tamanho; indice++)
    {
        segredos[indice] = segredos.push(Math.round(Math.random() * 10));
    }
    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>
1 resposta

Você usou duas formas de fazer a mesma coisa, na mesma linha de código. Veja:

segredos[indice] = segredos.push(Math.round(Math.random() * 10));

Ao dizer que segredos[indice] é igual a segredos.push(Math.round(Math.random() * 10)); , você estava dizendo que o valor do índice da array era o comprimento dela, após um elemento ser adicionado. Por isso a cada volta do loop o valor ia aumentando.

Para corrigir seu código, você pode substituir a linha que comentei por duas das opções a seguir.

Atribuindo um valor a um determinado índice da array:

segredos[indice] = Math.round(Math.random() * 10);

Onde você está dizendo que o valor de um determinado índice na array é igual ao número criado

Ou pedindo ao javascript que empurre mais um valor à array (Minha sugestão de melhor opção).

segredos.push(Math.round(Math.random() * 10));

Onde você está dizendo para o javascript: coloque mais um elemento na array com o valor criado.