1
resposta

Verificar solução

como um bom iniciante em programação, eu fiz, deu certo mas eu to com aquela sensação que de alguma coisa tá errada.

function sortear(){
    let quantidade = parseInt(document.getElementById('quantidade').value);  console.log(`Quantidade: ${quantidade}`);
    let de = parseInt(document.getElementById('de').value);     console.log(`De: ${de}`);
    let ate = parseInt(document.getElementById('ate').value);     console.log(`Até: ${ate}`);
    let numero;
    let sorteados = [];

if (de < ate){
    let diferenca = ate - de;
    if(quantidade < diferenca){
        for (let i = 0; i < quantidade; i++){
            numero = obterNumeroAleatorio(de, ate);
            while (sorteados.includes(numero)){ // .includes verifica se uma variavel (numero) já está contida dentro de uma lista (sorteados)
                numero = obterNumeroAleatorio(de, ate);
            }
            sorteados.push(numero)
        }
        let resultado = document.getElementById('resultado');
        resultado.innerHTML = `<label class="texto__paragrafo">Números sorteados:  ${sorteados.sort()}</label>`; // innerHTMT é utilizado para fazer alterações de texto não simples dentro do código html
        alteraraStatusBotao();
    } else {
        alert(`O intervalo entre ${de} e ${ate} é menor que a quantidade de números a serem sorteados`);
        reiniciar();
        alteraraStatusBotao();
    }
} else {
    alert('Não é possivel calcular intervalos negativos!');
    reiniciar();
    alteraraStatusBotao();
}

}

function obterNumeroAleatorio(min, max){
    return Math.floor(Math.random() * (max - min + 1) + min);
}

function alteraraStatusBotao(){
    let botao = document.getElementById('btn-reiniciar');
    if (botao.classList.contains('container__botao-desabilitado')){
        botao.classList.remove('container__botao-desabilitado');
        botao.classList.add('container__botao');
    } else {
        botao.classList.remove('container__botao');
        botao.classList.add('container__botao-desabilitado');

    }
}

function reiniciar (){
    document.getElementById('quantidade').value = '';
    document.getElementById('de').value = '';
    document.getElementById('ate').value = '';
    resultado.innerHTML = `<label class="texto__paragrafo">Números sorteados:  Nenhum até agora</label>`; // innerHTMT é utilizado para fazer alterações de texto não simples dentro do código html
    alteraraStatusBotao();
}
1 resposta

Seu código funciona, mas tem alguns detalhes que podem ser melhorados. Primeiro, valide se os valores de quantidade, de e ate são números válidos e se fazem sentido (ex.: quantidade não pode ser maior que o intervalo entre de e ate). Isso evita erros e loops infinitos. Outra coisa: o método sort() ordena números como strings, o que pode bagunçar a ordem (ex.: [10, 2, 5] vira [10, 2, 5]). Use sort((a, b) => a - b) para corrigir isso.

Evite repetir chamadas como alteraraStatusBotao() e reiniciar(). Centralize isso no final da função sortear. Também dê nomes mais claros para funções e variáveis, como alterarStatusBotao (corrigindo o nome) e numerosSorteados (em vez de sorteados). Por fim, na função reiniciar, adicione um focus() no campo quantidade para facilitar a usabilidade.