1
resposta

[Dúvida] copiei o msm codigo e na hora de sortea o numero ele está sempre me devolvendo os msm ..

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;
1 resposta

Olá, Jose! Pelo que entendi, você está tendo problemas com a geração de números aleatórios em seu código, pois sempre está retornando os mesmos números, certo?

Pelo que pude analisar no seu código, você está gerando números aleatórios de 0 a 10 com a função Math.round(Math.random() * 10). No entanto, a função Math.random() gera um número aleatório entre 0 (inclusivo) e 1 (exclusivo). Quando você multiplica esse número por 10, você obtém um número entre 0 e 10, mas ainda assim, pode haver muitos números "repetidos" porque Math.random() pode gerar muitos números que, quando arredondados, resultam no mesmo número.

Uma solução para isso seria verificar se o número já existe no array antes de inseri-lo. Você já fez isso no seu código, mas parece que há um pequeno erro na lógica. Você só incrementa a variável numero quando um novo número é adicionado ao array segredos. No entanto, você precisa incrementar numero em cada iteração do loop while, independentemente de um novo número ser adicionado ao array ou não. Caso contrário, se um número já existir no array, numero nunca será incrementado e o loop while continuará indefinidamente.

Aqui está o código corrigido:

function sorteiaNumeros(quantidade) {

    var segredos = [];

    while(segredos.length < 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);
            }
        }
    }

    return segredos;
}

Neste código, o loop while continua até que o array segredos tenha quantidade elementos. A cada iteração, um número aleatório é gerado. Se esse número não for 0 e não estiver no array segredos, ele é adicionado ao array.

Espero ter ajudado e bons estudos!