Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Estou com dúvida no curso de Lógica de Programação, no exercício do capítulo Desafio final.

Pessoal,

Estou com dúvida de como fazer para o código não repetir o numero dentro do Array. Para o computador escolher de 1 - 60 sem repetir e colocar dentro do array de tamanho 6. Podem me ajudar?

Fiz assim, mas como sou noob não sei nem o que quer dizer direito... kkk

Obrigado! Testando código abaixo (mas não deu certo):

var numerosSorteados = []; for(i = 0; i < 6; i++) { numerosSorteados[i] = Math.round( Math.random() * 59 + 1 ); for(i = 0; i < 6; i++) { if (numerosSorteados [i] == numerosSorteados [i++]) { return; } else { numerosSorteados[i] = Math.round( Math.random() * 59 + 1 ); } } }

1 resposta
solução!

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++;
   }

}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software