Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Mão na massa: proteção no total de números sorteados

Uma observação
O código está quase perfeito, mas ainda existe um loop infinito quando você tenta sortear, por exemplo, 5 números de 10 até 15.

O intervalo 10 até 15 tem apenas 6 números possíveis (10, 11, 12, 13, 14, 15).
Se você pede 5 números, isso é possível.
Mas, devido ao uso do alert ('Tentando obter número inédito') dentro do while, o loop pode ficar “preso” , e o alerta vai interromper o fluxo várias vezes.

se a quantidade for igual ao total de números possíveis, o loop pode ficar tentando gerar números repetidos por muito tempo.

Alguém verificou isso ?

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
2 respostas
solução!

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 ✓.

Ótimo , obrigado.