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!