1
resposta

Problema do loop infinito

Optei por fazer dessa maneira e gostaria de saber se esta tudo correto, se tem algo que eu possa deixar mais simplificado. Testei no site e funcionou direitinho.

if (de >= ate) { alert ('reveja o numero inserido'); return

      if (de >= ate) {
      alert ('reveja o numero inserido');
      return

else if (ate - de + 1 ); { alert ('Numeros alem do limite'); return

      else if (ate - de + 1 ); {
      alert ('Numeros alem do limite');
      return 
      }
     
1 resposta

Olá, Pedro!

Vamos dar uma olhada no seu código e ver como podemos melhorá-lo. Pelo que você escreveu, parece que você está tentando implementar uma proteção para evitar um loop infinito quando a quantidade de números a serem sorteados é maior do que o intervalo disponível. No entanto, há alguns problemas na estrutura do seu código. Aqui está uma versão revisada com algumas correções e simplificações:

if (de >= ate) {
    alert('Reveja o número inserido');
    return;
}

if (ate - de + 1 < quantidade) {
    alert('Números além do limite');
    return;
}

Vamos analisar as mudanças:

  1. Estrutura do if: Você tinha um if aninhado dentro de outro if, o que não é necessário. Além disso, havia um erro de sintaxe com o ponto e vírgula (;) dentro da condição else if.

  2. Verificação do intervalo: A segunda condição verifica se o intervalo de números é menor do que a quantidade de números a serem sorteados. Se for, exibe um alerta e interrompe a execução.

  3. Remoção de duplicatas: Não é necessário repetir o mesmo bloco de código. Uma única verificação é suficiente.

Aqui está um exemplo prático de como você pode usar esse código em um contexto maior:

function sortearNumeros(de, ate, quantidade) {
    if (de >= ate) {
        alert('Reveja o número inserido');
        return;
    }

    if (ate - de + 1 < quantidade) {
        alert('Números além do limite');
        return;
    }

    let 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, a função sortearNumeros faz a verificação inicial para garantir que os parâmetros são válidos antes de tentar sortear os números. Se as verificações falharem, a função exibe um alerta e retorna sem fazer nada.

Espero ter ajudado e bons estudos!