O que não ficou tão claro para mim foi a parte do código para evitar a repetição de números. Alguém poderia me ajudar?
O que não ficou tão claro para mim foi a parte do código para evitar a repetição de números. Alguém poderia me ajudar?
exatamente a mesma dúvida que a minha Natalia.
Olá Natalia, consegui entender. Vou tentar explicar por aqui. Vamos olhar linha por linha o que o código está processando:
//funcao sorteia: sorteia um numero aleatório entre 1 e 10
function sorteia () {
return Math.round (Math.random()*10);
}
Esse numero fica gravado, pq ainda a função não foi chamada no código. Vamos entender a próxima função em partes, pq ela é bem longa. Lembrando que, a função sorteiaNumeros (quantidade) será a responsável por:
function sorteiaNumeros (quantidade) { \\quantidade é 3
var segredos = []; //declara a variável segredos recebendo vazio
var numero = 1; //declara variável número recebendo 1 para evitar o loop infinito
Então, entro no while dentro da function sorteiaNumeros:while (numero <= quantidade) { // 1 < = 3 ok
var numeroAleatorio = sorteia (); \\ vamos supor que sorteou segredo nº 5
var achou = false;
Continuando o código:if (numeroAleatorio !== 0) { //como 5 é diferente de 0 entro no for
Dentro do for a posicao é igual a 0 e segredos foi declarado como vazio lá em cima, certo? então aqui nessa 1ª rodada posicao é igual a 0 e segredos.lenght igual a 0 também certo? então não satisfaz a condição do for, então já saio dele.
for (var posicao=0; posicao < segredos.length; posicao++) {
if (segredos [posicao] == numeroAleatorio) {
achou = true;
break;
}
}
Quando saio dele caio no if, achou==false essa condição foi satisfeita, insiro dentro do meu array o número 5 do meu exemplo (como número aleatório sorteado) e incremento +1 à variável número.
if (achou == false) {
segredos.push (numeroAleatorio);
numero++;
}
Agora vamos para a 2ª rodada para ser possível compreender:
function sorteiaNumeros (quantidade) {
var segredos = [ ]; // agora não é mais vazio, pois foi inserido o número [5, ?, ? ]
var numero = 1; //agora var numero = 2
Então entro no while dentro da function sorteiaNumeros:
while (numero <= quantidade) { // 2 <= 3 ok
var numeroAleatorio = sorteia (); // vamos supor que agora sorteou o segredo nº 2
var achou = false;
Continuando o código:
if (numeroAleatorio !== 0) { // como 2 é diferente de 0 entro no for
Dentro do for, a posicao é igual a 0 e segredos.lenght agora é 1 (pq já tenho o numero 5 lá dentro). Então desta vez satisfaz a condição do for, então permaneço nele.
for (var posicao=0; posicao < segredos.length; posicao++) {
if (segredos [posicao] == numeroAleatorio) {//segredos [0] --> 5 == 2, NÃO.
achou = true;
break;
}
}
Como não satisfez a condição do if e não tenho mais como continuar no for, saio dele. Caio no if, achou==false essa condição foi satisfeita, insiro dentro do meu array desta vez o segredo numero 2 do meu exemplo (como número aleatório sorteado) e incremeto +1 à variável número.
if (achou == false) {
segredos.push (numeroAleatorio);
numero++;
}
Agora a 3ª rodada para entender a questão da repetição:
function sorteiaNumeros (quantidade) { //quantidade = 3
var segredos = [ ]; // agora temos dois números no array, pois foram inseridos os números [5, 2, ? ]
var numero = 1; //agora var numero = 3
Entro no while dentro da function sorteiaNumeros:
while (numero <= quantidade) { // 3 <= 3 ok
var numeroAleatorio = sorteia (); \\ vamos supor que agora sorteou o segredo nº 2 novamente.
var achou = false;
Continuando o código:
if (numeroAleatorio !== 0) { //como 2 é diferente de 0 entro no for
Dentro do for a posicao é igual a 0 e segredos.lenght agora é 2 (pq já tenho o numero 5 e 2 lá dentro)logo satisfaz a condição do for, então permaneço nele.
for (var posicao=0; posicao < segredos.length; posicao++) {
if (segredos [posicao] == numeroAleatorio) { //segredos [0] --> 5 == 2, NÃO.
achou = true;
break;
}
}
Desta vez continuo no for, pois foi incrementado +1 na posição e continua atendendo a condição posicao < segredos.length (1<2).
for (var posicao=0; posicao < segredos.length; posicao++) {
if (segredos [posicao] == numeroAleatorio) { //segredos [1] --> 2 == 2, SIM.
achou = true;
break;
}
}
Como dessa vez o número sorteado foi igual ao segredo da posição, saio do for. Caio no if, achou==false essa condição desta vez não é satisfeita, então dessa vez não insiro nada dentro do meu array e nem incremento +1 à variável número. Ela continuará como 3 e reinicio o processo com um novo nº aleatório.
if (achou == false) { // achou==true
segredos.push (numeroAleatorio);
numero++;
}
Espero que apesar da resposta longa tenha dado para entender. Se não ficou claro algum passo, me avise. Abraços!
Rafaela, muito obrigado pela resposta! Graças a ela, consegui solucionar o problema de repetição dos números no meu programa.