Oi, Ewerton! Tudo bem?
Que iniciativa fantástica! Tentar resolver o desafio antes de assistir à aula é uma das melhores maneiras de testar e consolidar o conhecimento. Parabéns por se desafiar assim!
Realmente os códigos são diferentes e, o mais interessante, é que cada um tem um ponto forte que o outro não tem!
O Ponto FORTE do seu código: Validações!
Você fez duas validações que são excelentes:
Valores válidos: Você checa se os números são NaN, se o início é maior que o fim, etc. (if (quantidadeDeNumeros <= 0 ...)). Ótimo!
Intervalo suficiente (A MAIS IMPORTANTE):
if (fimIntervalo - inicioIntervalo + 1 < quantidadeDeNumeros) {
alert("Intervalo insuficiente...");
return;
}
Essa sua validação é crucial. Se o usuário pedisse para sortear 10 números, mas o intervalo fosse apenas de 1 a 5, o seu código avisa o usuário e para.
Os Pontos Fracos (Bugs) do seu código
Apesar da validação excelente, a sua lógica de sorteio tem dois problemas principais que a solução da aula corrige:
O Intervalo (O "De"):
Sua fórmula para sortear está assim:
numerosSorteados.push(parseInt(Math.random() * fimIntervalo + 1));
Perceba que você não está usando a variável inicioIntervalo. Seu código sempre sorteia um número entre 1 e o fimIntervalo. Se o usuário pedir números "De 10" "Até 15", o seu código vai sortear entre 1 e 15.
A solução da aula usa uma função separada (obterNumeroAleatorio(min, max)) com a fórmula correta para respeitar o início e o fim do intervalo:
Math.floor(Math.random() * (max - min + 1)) + min
Números Repetidos:
O seu loop while apenas sorteia um número e o adiciona na lista (numerosSorteados.push(...)). Ele não confere se aquele número já foi sorteado antes.
Por isso, no seu código, se você pedir 3 números, pode receber um resultado como [5, 8, 5].
A solução da aula resolve isso com este trecho:
while (sorteados.includes(numero)) {
numero = obterNumeroAleatorio(de, ate);
}
Isso garante que, se um número repetido for sorteado, o código "tenta de novo" até encontrar um número único.
Conclusão
O seu código é seguro? Sim! Sua validação de intervalo (if (fimIntervalo...) previne um crash (loop infinito).
**Já o código da aula, ele garante as duas regras principais do desafio: respeitar o intervalo e sortear números únicos.
A "solução perfeita" seria uma fusão dos dois: pegar as suas validações (principalmente a do tamanho do intervalo) e usá-las junto com a lógica de sorteio e verificação de duplicados da aula.
Sua percepção foi excelente e a lógica que você montou é muito boa. Continue com essa atitude de tentar resolver os problemas sozinho primeiro!
Bons estudos!
Sucesso ✨