Oiê Phelipe, tudo bem?
Agradeço por esperar um retorno nosso!
Compreendo, o seu feedback sobre a aula é muito importante para melhorarmos as aulas para vocês.
Com relação a aula, o professor declarou o console.log (segredos)
para sabermos se está gerando números/segredos repetidos. E vimos que está.
var segredos = sorteiaNumeros (3);
console.log (segredos);
No while
declaramos a função para resolver o problema é referente a apenas 1 dos números/segredos da lista completa.
Entendido isso, construiremos o código para resolver a questão da repetição, informaremos dentro do while
que se a var achou = false;
, ou seja, não achou um número específico da lista repetido/duplicado, o programa seguirá para o próximo número da lista. E declaramos essa função conforme explicado no vídeo:
while(numero <= quantidade) {
var numeroAleatorio = sorteia();
var achou = false;
if (achou == false) {
segredos.push(numeroAleatorio);
}
}
Em seguida, verificamos se um dos números/segredos gerados é repetido utilizando o for
para conferir se um dos números/segredos já inseridos na lista juntamente com o anterior é repetido.
while(numero <= quantidade) {
var numeroAleatorio = sorteia();
var achou = false;
for(var posicao = 0; posicao < segredos.length; posicao++) {
if (achou == false) {
segredos.push(numeroAleatorio);
}
}
Para completar o código, caso tenha um número/segredo repetido o while
vai parar de ser executado para recomeçar o processo de inserir um número/segredo na lista até que este não seja repetido com os números anteriores. Para que o while
pare de procurar um novo número/segredo que não seja repetido se utiliza o break
após declararmos var achou = true;
. Quando ele recomeçar o processo de inserir um número/segredo ele vai passar novamente pela verificação que construímos até que o número gerado não seja repetido.
while(numero <= quantidade) {
var numeroAleatorio = sorteia();
var achou = false;
for(var posicao = 0; posicao < segredos.length; posicao++) {
if(segredos[posicao] == numeroAleatorio){
achou = true;
break;
}
}
if (achou == false) {
segredos.push(numeroAleatorio);
}
}
Estamos pedindo para o while
gerar 3 números/segredos aleatórios. Ele gera o primeiro corretamente, mas o segundo número/segredo veio repetido (igual ao primeiro número/segredo), o while
não pode adicionar o próximo número/segredo da lista, tem que gerar novamente um número/segredo ainda na posição. E o numero++
vai gerar o próximo número/segredo aleatório até que não seja repetido. Declaramos número++
como o professor ensinou na aula.
while(numero <= quantidade) {
var numeroAleatorio = sorteia();
var achou = false;
for(var posicao = 0; posicao < segredos.length; posicao++) {
if(segredos[posicao] == numeroAleatorio){
achou = true;
break;
}
}
if (achou == false) {
segredos.push(numeroAleatorio);
numero++;
}
}
E para finalizar, a lista está gerando um número/segredo 0, para que isso não aconteça, declaramos com o if (numeroAletorio !== 0){}
e dentro dele copiamos e colamos o código que criamos para evitar os números/segredos repetidos. Assim ele não gera nenhum número/segredo repetido e nem o número/segredo 0.
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;
Assim ficou o código que resolverá o problema de repetição dos segredos e do número 0 gerado.
Aproveitando, gostaria de indicar alguns materiais que vão lhe ajudar a entender melhor as conexões entre as funções.
Sinta-se à vontade também para responder pontuando exatamente as suas dúvidas, estarei à disposição para ajudá-lo no que for preciso.
Bons estudos e a gente se vê!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!