1
resposta

Código sorteador de números

Eu tentei resolver o desafio antes de ver os videos e ficou assim

function sortear() {
    let quantosNumeros = parseInt(document.getElementById("quantidade").value);
    let menorNumero = parseInt(document.getElementById("de").value);
    let maiorNumero = parseInt(document.getElementById("ate").value);


    let numerosSorteados = [];


    while (numerosSorteados.length < quantosNumeros) {


    let sorteio = Math.floor(Math.random() * (maiorNumero - menorNumero + 1)) + menorNumero;


    numerosSorteados.push(sorteio);
   
    console.log(numerosSorteados)
    }


   document.getElementById("resultado").innerHTML =
    "Números sorteados: " + numerosSorteados.join(", ");


   let botao = document.getElementById("btn-reiniciar");
   botao.classList.remove("container__botao-desabilitado");
   botao.classList.add("container__botao");
}




function limparCampo() {
    document.getElementById("quantidade").value = '';
    document.getElementById("de").value = '';
    document.getElementById("ate").value = '';
}
    function reiniciar() {
    limparCampo();
    document.getElementById("resultado").innerHTML =
        "Números sorteados: nenhum até agora";
}

Depois de assistir os videos notei que tinham coisas faltando no meu código

  • O mesmo número podia ser sorteado várias vezes no meu
  • O botão de reiniciar não voltava a deixar o "reiniciar" desabilitado
  • O texto embaixo com o resultado estava aparecendo sem seguir as configurações visuais da página, aparecendo de forma bem menor

Então eu consertei essas partes mantendo a forma como eu tinha feito e criei também uma função para habilitar e desabilitar o botão pra não ter que ficar repetindo. O código ficou assim:


function sortear() {
    let quantosNumeros = parseInt(document.getElementById("quantidade").value);
    let menorNumero = parseInt(document.getElementById("de").value);
    let maiorNumero = parseInt(document.getElementById("ate").value);

    let numerosSorteados = [];

    while (numerosSorteados.length < quantosNumeros) {

    let sorteio = Math.floor(Math.random() * (maiorNumero - menorNumero + 1)) + menorNumero;
     if (!numerosSorteados.includes(sorteio)) {
    numerosSorteados.push(sorteio);
}
    
    console.log(numerosSorteados)
    }

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


 mudarStatusBotao(true) ; 
}

function mudarStatusBotao(ativar) {
        let botao = document.getElementById("btn-reiniciar");

   if (ativar) {
        botao.classList.remove("container__botao-desabilitado");
        botao.classList.add("container__botao");
    } else {
        botao.classList.remove("container__botao");
        botao.classList.add("container__botao-desabilitado");
    }
}


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

Olá, Stella!

Meus parabéns pela iniciativa de tentar resolver o desafio antes mesmo de assistir aos vídeos. Essa é uma das melhores formas de aprender, pois força o cérebro a buscar soluções próprias e cria uma "âncora" para quando você vê a explicação do instrutor. Você demonstrou um domínio muito bom sobre a manipulação do DOM e a lógica de controle de estado.

Sua evolução entre a primeira e a segunda versão do código é notável. Ao identificar que faltava o tratamento de números duplicados e a alternância de estados do botão, você aplicou conceitos fundamentais de experiência do usuário (UX) e integridade de dados. Além disso, sua decisão de criar a função mudarStatusBotao(ativar) passando um parâmetro booleano é uma prática excelente de programação, pois torna o código mais legível e fácil de manter.

Dica de Evolução

Para elevar ainda mais o nível do seu sorteador, vale notar que você pode adicionar uma pequena validação no início da função sortear(). Caso o usuário peça para sortear 10 números em um intervalo que só possui 5 (por exemplo, de 1 a 5), o seu laço while ficaria em um loop infinito, pois ele nunca encontraria o sexto número único. Você pode adicionar um if para verificar se a quantidade de números solicitada é maior do que o intervalo disponível.

Conseguiu perceber como a criação de funções pequenas e específicas (como a sua mudarStatusBotao) ajuda a evitar repetições desnecessárias e deixa o código muito mais profissional?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!