Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Não consigo implementar uma maneira de verificar se está faltando alguma informação no sorteio de números.

Na linha 11 tentei usar um if para verificar se alguma das três informações necessárias para o jogo está faltando. Antes de adicionar as linhas 11 e 12 o código estava funcionando corretamente, depois da adição a página trava quando clico no botão sortear.

Aqui está o 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);
    let numerosSorteados = [];

    if (de > ate){
        alert('O menor número é maior do que o maior número, por favor corrija.');
    } else if(ate - de < quantidade){
        alert('A quantidade de números é maior que a quantia possível de números a serem sorteados, por favor corrija.');
    }else if(quantidade == '' || de == '' || ate == ''){
        alert('Alguma informação está faltando.');
    }else{
        for(let i=0; i<quantidade; i++){
            let numero = sortearNumero(de, ate);
            while(numerosSorteados.includes(numero)){
                numero = sortearNumero(de, ate);
            }
        numerosSorteados.push(numero);
        }
            
        let resultado = document.getElementById('resultado');
        resultado.innerHTML = `<label class="texto__paragrafo">Números sorteados:  ${numerosSorteados}</label>`;
        
        if(document.getElementById('resultado').innerHTML == '<label class="texto__paragrafo">Números sorteados:  nenhum até agora</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.add('container__botao-desabilitado');
        botao.classList.remove('container__botao');
    }
}

function reiniciar(){
    alterarBotao();
    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>';
}
1 resposta
solução!

Oi Gabriel! Tudo bem?

Quando você usa parseInt em um valor vazio, ele retorna NaN, o que faz o código travar. Para corrigir:

  1. Substitua a verificação de strings vazias por isNaN para garantir que quantidade, de e ate sejam números válidos.
  2. Adicione return para sair da função se houver erro.

Aqui está a validação:

if (isNaN(quantidade) || isNaN(de) || isNaN(ate)) {
    alert('Alguma informação está faltando ou é inválida.');
    return;
}

Onde colocar a correção?

Adicione o código de verificação logo após obter os valores e antes do primeiro if:

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

    // Verificação adicionada após a leitura dos valores
    if (isNaN(quantidade) || isNaN(de) || isNaN(ate)) {
        alert('Alguma informação está faltando ou é inválida.');
        return; // Sai da função se houver erro
    }

    if (de > ate) {
        alert('O menor número é maior do que o maior número, por favor corrija.');
    } else if (ate - de < quantidade) {
        alert('A quantidade de números é maior que a quantia possível de números a serem sorteados, por favor corrija.');
    } else {
        // Restante do código...
    }
}

Com essas modificações seu código deverá funcionar.

Espero ter ajudado.

Se a resposta ajudou a resolver o problema, por favor, marcar o tópico como solucionado. Bons estudos!