1
resposta

Problemas técnicos

Estou com um problema bem chato, que está atrapalhando para a conclusão das tarefas, e não sei mais o que fazer para resolver, começou após configurar o botão "reiniciar" e não parou mais, com ou sem a função de reiniciar o botão. Ao usar os números 1, 10 ou 5, e clicar em sortear, a aplicação no navegador simplesmente congela, me obrigando a fechar o navegador a brir novamente, isso aconteceu no Mozilla, no Edge e no Chrome, alguém consegue me ajudar? Meu código esta assim:

function sortear() {

    let quantidade = parseInt(document.getElementById('quantidade').value); //.value é usado para pegar o valor do elemento digitado no id "quantidade" lá no HTML
    let de = parseInt(document.getElementById('de').value); // faz a mesma coisa que o anterior, e o seguinte, com seu respectivo id la no HTML
    let ate = parseInt(document.getElementById('ate').value);
    
    let sorteados = []; // uma lista (ou um Array), criado para armazenar os numeros sorteados
    let numeros;

    if(quantidade > ate || de > ate) {
        alert('A quantidade de sorteados não pode exceder o número máximxo de participantes, assim como o número máximo não pode ser menor do que o número inicial!');
        return;
    }

    for (let i = 0; i < quantidade; i++) { //criado um loop for para determinar que, a variável i = 0, enquanto (representado pelo ;) i for menor que a variável quantidade, some um ao i (representado pelo i++)
        numeros = sortearNumero(de, ate); // aqui a variável números (declarada acima) está recebendo o valor da função sortearNumero com parametros declarados como "de" e "ate" que são as funções declaradas que capturam os inputs de limite minimo e máximo digitados
        
        while(sorteados.includes(numeros)) { //loop while está sendo usado dentro do for para repetir a função de sortear numero enquanto dentro da lista estiver incluso um numero que ja foi sorteado anteriormente
            numero = sortearNumero(de, ate);
        }

        sorteados.push(numeros); // aqui estamos usando o .push(numeros) para guardar o valor obtido pela função de sortear que foi chamada acima e que está dando valor à função "numeros"
    }


    console.log(sorteados);

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

    alterarBotao();
    
    
}

function sortearNumero(min, max) {

    return Math.floor(Math.random() * (max - min + 1)) + min;

}

function alterarBotao() {
    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('de').value = '';
    document.getElementById('quantidade').value = '';
    document.getElementById('ate').value = '';
    document.getElementById('resultado').innerHTML = ' <label class="texto__paragrafo">Números sorteados:  nenhum até agora</label>';
    alterarBotao();
}
1 resposta

Oi!

O problema está no seu loop for:

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

Dentro do loop você chamou a variável de numero (no singular), mas deveria ser numeros:

while(sorteados.includes(numeros)) {
    numeros = sortearNumero(de, ate);
}