1
resposta

[Sugestão] Mão na massa: proteção na entrada de valores

Inseri a proteção na entrada de valores dentro do "for" que sorteia os números aleatórios, tem algum problema?

function sortear() {
    let quantidade = parseInt(document.getElementById('quantidade').value);
    let de = parseInt(document.getElementById('de').value);
    let ate = parseInt(document.getElementById('ate').value);

    let sorteados = [];

    for (let i = 0; i < quantidade; i++) {
        let numero = obterNumeroAleatorio(de, ate);

        while (sorteados.includes(numero)) {
            numero = obterNumeroAleatorio(de, ate);
        }

        if (de >= ate) {
            alert("Verifique os números digitados!")
            return;
        }

        sorteados.push(numero);
    }

    let resultado = document.getElementById('resultado');
    resultado.innerHTML = `<label class="texto__paragrafo">Números sorteados:  ${sorteados}</label>`;

    alterarStatusBotao();
}

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

function alterarStatusBotao() {

    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 reiniciarBotao() {
    let botao = document.getElementById('btn-reiniciar');
    botao.classList.contains('container__botao')
    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 = '';
    document.getElementById('resultado').innerHTML = '<label class="texto__paragrafo">Números sorteados:  nenhum até agora</label>';

    reiniciarBotao();
}
1 resposta

Olá Harlen! Tudo bem?

Inserir a proteção dentro do "for" que sorteia os números aleatórios pode não ser a melhor abordagem. Isso porque a verificação if (de >= ate) será feita repetidamente, o que não é necessário e pode impactar a performance, especialmente se quantidade for um número grande.

Uma solução mais eficiente seria realizar essa verificação antes do loop for, garantindo que os valores de entrada sejam válidos antes de iniciar o sorteio. Veja como você pode ajustar seu código:

function sortear() {
    let quantidade = parseInt(document.getElementById('quantidade').value);
    let de = parseInt(document.getElementById('de').value);
    let ate = parseInt(document.getElementById('ate').value);

    // Verificação antes do loop
    if (de >= ate) {
        alert("Verifique os números digitados!");
        return;
    }

    let sorteados = [];

    for (let i = 0; i < quantidade; i++) {
        let numero = obterNumeroAleatorio(de, ate);

        while (sorteados.includes(numero)) {
            numero = obterNumeroAleatorio(de, ate);
        }

        sorteados.push(numero);
    }

    let resultado = document.getElementById('resultado');
    resultado.innerHTML = `<label class="texto__paragrafo">Números sorteados:  ${sorteados}</label>`;

    alterarStatusBotao();
}

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

function alterarStatusBotao() {
    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 reiniciarBotao() {
    let botao = document.getElementById('btn-reiniciar');
    botao.classList.contains('container__botao')
    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 = '';
    document.getElementById('resultado').innerHTML = '<label class="texto__paragrafo">Números sorteados:  nenhum até agora</label>';

    reiniciarBotao();
}

Dessa forma, a verificação é feita uma única vez antes de iniciar o sorteio, tornando o código mais eficiente e claro.

Espero ter ajudado e bons estudos!

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