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

[Sugestão] Problema do Loop Infinito

Eu implementei essa solução, a qual pemite repetições:

if(de >= ate){
        alert(`Informe outros valores para o intervalo de números a serem sorteados, pois o valor mínimo não pode ser maior ou igual que o máximo.`)
    }else if(qutdNumero < (ate - de + 1)){
        for(var i = 0; i < qutdNumero; i++){
            numero = obeterNumeroAleatorio(de, ate);
    
            while(sorteados.includes(numero)){
                numero = obeterNumeroAleatorio(de, ate);
            }
            sorteados.push(numero);
        }
        mostraResultado.innerHTML = ` <label class="texto__paragrafo">Números sorteados: ${sorteados}</label>`;
        alterarStatusBtn();
    }else{
        for(var i = 0; i < qutdNumero; i++){
            numero = obeterNumeroAleatorio(de, ate);
    
            sorteados.push(numero);
        }
        mostraResultado.innerHTML = ` <label class="texto__paragrafo">Números sorteados: ${sorteados}</label>`;
        alterarStatusBtn();
    }

Mas, gostaria de saber se está correto ou não permitir repetições.

2 respostas
solução!

Olá, Pedro! Como vai?

Bom, a resposta depende do que você deseja alcançar com o seu código.

Se você quer que todos os números dentro do intervalo sejam únicos, então não permitir repetições é o caminho certo. Porém, se você não se importa que alguns números possam aparecer mais de uma vez, permitir repetições é perfeitamente aceitável.

No entanto, pelo contexto da aula/exercício, parece que o objetivo é evitar a repetição de números. Isso é especialmente importante se a quantidade de números que você deseja sortear for maior do que o intervalo de números disponíveis. Se você tentar sortear mais números do que existem no intervalo sem permitir repetições, você acabará em um loop infinito, pois o código estará sempre tentando encontrar um número único que não existe.

Em resumo, se você deseja evitar repetições e o problema do loop infinito, seu código parece estar no caminho certo. Se você quiser permitir repetições, você pode remover o loop while e simplesmente gerar um novo número aleatório para cada iteração do loop for.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Entendi, eu fiz aquele else para os casos que o intervalo é insuficiente, mas acho melhor fazer um alert avisando que precisa de um intervalo maior, ou uma quantidade menor de números a serem selecionados.