Não entendi porque a variável "achou" deve ser declarada como falsa. Resolvi inverter e colocar true onde é falso e vice-versa e o código não funcionou corretamente. Gostaria de entender o motivo.
Não entendi porque a variável "achou" deve ser declarada como falsa. Resolvi inverter e colocar true onde é falso e vice-versa e o código não funcionou corretamente. Gostaria de entender o motivo.
Olá Renan, tudo bem?
Vamos entender o que está acontecendo. Repare que queremos inserir números na nossa variável segredos que por enquanto é uma array sem nenhum elemento. Inicialmente o achou está como false. Vamos para o for.
Vamos comparar segredos[posicao]==numeroAleatorio
ou seja, estamos comparado o 1º elemento de segredos (que é nulo) com o númeroAleatorio que foi gerado. Isso resulta em que? false
. Continuando a execução do código vamos para o próximo if(achou == false)
. A variável achou ainda é false
, nesse caso
false == false
resulta em que? true
.
Então a condição vai ser atendida, excutando segredos.push(numeroAleatorio)
e inserindo o primeiro elemento na nossa array.
Repare agora que já temos um elemento na array, e caso esse elemento seja igual ao numeroAleatorio
a condição do primeiro if
será atendida, fazendo achou ser true
e impedindo a execução do segundo if
. Conseguimos então que esse número repetido não entre na array.
O achou = false
voce pode pensar como um gatilho para que eu tenha o meu primeiro elemento inserido na array (garantindo a execução do 2º if). Se voce colocar o achou = true
, o primeiro if não vai ser executado(pq não ha nehnum elemento na array), partindo para o segundo if que não vai ser executado pq o achou é true
e aí fica preso nesse looping.
Vc até pode colocar o achou=true
desde que você também inverta o achou dos dois if's
. Funciona do mesmo jeito. No entanto, semanticamente faz mais sentido o 1º if ter o achou = true
.
Espero que tenha ficado claro. Qualquer coisa é só perguntar.
Um abraço.
function sorteiaNumeros(quantidade) {
var segredos = [];
var numero = 1;
while(numero <= quantidade) {
var numeroAleatorio = sorteia();
if(numeroAleatorio !== 0 ) {
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++;
}
}
}
return segredos;
}