Olá André
Você pode analisar o código por partes:
var numerosSorteados = [];
for(i = 0; i < 6; i++) {
numerosSorteados[i] = Math.round( Math.random() * 59 + 1 );
Nessa primeira parte você está preenchendo o array com números aleatórios. [1, 10, 50, 1, 2, 48], por exemplo.
for(i = 0; i < 6; i++) {
if (numerosSorteados [i] == numerosSorteados [i++]) {
return;
} else {
numerosSorteados[i] = Math.round( Math.random() * 59 + 1 );
}
}
Dentro do for
eu acho que a sua intenção era verificar se o array contém algum número repetido, se contiver, então você quer sortear novamente o valor.
Porém na condição if (numerosSorteados [i] == numerosSorteados [i++])
, você está utilizando o ++
. Toda vez que utilizamos o ++
em uma variável numérica, seu valor é incrementado em uma unidade. Mas isso já está dentro de um for
que incrementa a variável i em uma unidade a cada volta, então você acaba incrementando o i duas vezes por volta. Além disso, imagine que a primeira parte do seu código, a que gera o array aleatório inicial produzisse o seguinte array: [1, 10, 50, 1, 2, 48]
Seu código tenta detectar a repetição, porém na hora de gerar o novo número aleatório ele não verifica se esse novo número gerado é repetido.
Para resolver o problema, você poderia tentar implementar um algoritmo um pouco mais simples: Gere um número aleatório, se ele não estiver no array, então ele é adicionado, senão eu preciso gerar mais um número. Esse algoritmo é implementado pelo código abaixo:
var numerosSorteados = [];
// ainda não tenho nenhum número sorteado
var gerados = 0;
while(gerados < 6){
// gero o número aleatório:
var numero = Math.round(Math.random() * 59 + 1);
// verifico se o número já está no array:
var estaNoArray = false;
for(int j = 0; j < gerados; j++){
if(numero == numerosSorteados[j]){
estaNoArray = true;
}
}
// se não estiver no array, então coloca e
// incrementa o número de valores aleatórios gerados
// senão simplesmente ignora o número gerado nessa volta
if(estaNoArray == false){
numerosSorteados[gerados] = numero;
gerados++;
}
}