1
resposta

[Sugestão] Minha solução para proteção dos valores

Para resolução, acabei optando por uma modificação na indicação do instrutor e gostaria de verificar se faz sentido.

Indicação do instrutor:

if (quantidade > (ate - de + 1)) {
    alert('Campo "Quantidade" deve ser menor ou igual ao intervalo informado no campo "Do número" até o campo "Até o número". Verifique!');
    return;
  }

Identifiquei que no caso de sortear 5 números de 1 à 5, o sistema permitia, o que eu achei redundante, tendo em vista que o resultado seria (1,2,3,4,5) e nem precisaria de sorteio, então alterei para o operador "> =" para comparar a quantidade, o que parece ter resolvido a questão:

if (quantidadeDeNumeros >= (numeroFinal - numeroInicial + 1)) {
        alert ('Você precisa informar nos campos "Quantidade de números" e "Do número", valores menores que no campo "Até o número".');
        return;
    }

Também verifiquei que estava permitindo sortear mesmo sem informar nenhum valor, então acrescentei o seguinte código:

if (!quantidadeDeNumeros || !numeroInicial || !numeroFinal) {
        alert('Você precisa informar valores em todos os campos.');
        return;
    }

Gostaria de um feedback, obrigado!

Segue o código completo:

function sortear() {
    let quantidadeDeNumeros = parseInt(document.getElementById('quantidade').value);
    let numeroInicial = parseInt(document.getElementById('de').value);
    let numeroFinal = parseInt(document.getElementById('ate').value);
    let numerosSorteados = [];
    
    if (!quantidadeDeNumeros || !numeroInicial || !numeroFinal) {
        alert('Você precisa informar valores em todos os campos.');
        return;
    }

    if (quantidadeDeNumeros >= (numeroFinal - numeroInicial + 1)) {
        alert ('Você precisa informar nos campos "Quantidade de números" e "Do número", valores menores que no campo "Até o número".');
        return;
    }
    
    for (let i = 0; i < quantidadeDeNumeros; i++) {
        let sorteio = getRandomIntInclusive(numeroInicial, numeroFinal);
        while (numerosSorteados.includes(sorteio)) {
            sorteio = getRandomIntInclusive(numeroInicial, numeroFinal);
        }
        numerosSorteados.push(sorteio);
    }
                
    let textoNumerosSorteados = document.getElementById('resultado');
    if (numerosSorteados.length > 1) {
        textoNumerosSorteados.innerHTML = `<label class="texto__paragrafo">Números sorteados:  ${numerosSorteados}.</label>`;
    } else {
        textoNumerosSorteados.innerHTML = `<label class="texto__paragrafo">Número sorteado:  ${numerosSorteados}.</label>`;
    }
                
    trocarStatusBotao();
}

function trocarStatusBotao() {
    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 getRandomIntInclusive(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function reiniciar() {
    document.getElementById('quantidade').value = '';
    document.getElementById('de').value = '';
    document.getElementById('ate').value = '';
    document.getElementById('resultado').innerHTML = '<label class="texto__paragrafo">Números sorteados:  nenhum até agora</label>';
    trocarStatusBotao();
}
1 resposta

Oi, Marcone! Tudo bem?

Gostei bastante das suas modificações! Elas fazem muito sentido e ajudam a tornar o código mais robusto, melhorando a usabilidade e a segurança do código, parabéns! Obrigada por ter compartilhado com a nossa comunidade do fórum, tenho certeza que ajudará muitos colegas! Caso surja alguma dúvida, sinta-se à vontade em comunicar por aqui, estou à disposição e ficarei super feliz em poder ajudar!

Um forte abraço e bons estudos!