Olá Marcelo! Como vai?
O problema do loop infinito ocorre porque o código tenta sortear números exclusivos dentro de um intervalo que não possui números suficientes para atender à quantidade solicitada.
Para resolver isso, você pode implementar uma verificação antes de iniciar o sorteio. Essa verificação deve garantir que a quantidade de números que você deseja sortear não seja maior do que o intervalo disponível. Aqui está um exemplo de como você pode fazer isso:
function sortearNumeros(quantidade, de, ate) {
const intervalo = ate - de + 1;
if (quantidade > intervalo) {
alert('A quantidade de números solicitada é maior que o intervalo disponível. Por favor, escolha uma quantidade menor.');
return;
}
const sorteados = [];
for (let i = 0; i < quantidade; i++) {
let numero;
do {
numero = obterNumeroAleatorio(de, ate);
} while (sorteados.includes(numero));
sorteados.push(numero);
}
return sorteados;
}
Neste exemplo, antes de iniciar o loop de sorteio, o código verifica se a quantidade de números solicitada é maior que o intervalo disponível. Se for, ele exibe um alerta e interrompe a execução, evitando o loop infinito.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.