2
respostas

Incrementando a tarefa

Pessoal, boa noite!
Resolvi o caso sugerido na aula e pensei em dar uma incrementada ao adicionar um "alert" caso o usuário clique no botão "sortear" sem preencher os campos, o que está sendo permitido. Porém, pensei em como deveria ser o código e não está funcionando. Alguém poderia me dizer onde estou errando? Segue 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);

// Emite um alerta caso os campos não sejam preenchidos
if(quantidade == '' || de == '' || ate == ''){

    alert('Favor, preencher os campos abaixo!');
    return;       
}

let sorteados = [];
let numero;

 


if(de > ate){

     alert('O número inicial deve ser menor que o número final!');
     reiniciar();
   
} else{
    for (let i = 0; i < quantidade; i++){
    numero = obterNumerosAleatorios(de, ate);

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

    sorteados.push(numero);

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

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
2 respostas

Oi Geraldo, tudo bem? 😊

Sua iniciativa de adicionar validações para melhorar a experiência do usuário é excelente! 👍

O problema no seu código está na forma como você está verificando se os campos foram preenchidos. A função parseInt() tenta converter o valor para um número inteiro. Se o campo estiver vazio, parseInt() retorna NaN (Not a Number). Comparar NaN com uma string vazia ('') não funcionará como esperado.

Para corrigir isso, você pode verificar se o resultado de parseInt() é NaN ou se o valor original do campo está vazio.

Veja uma sugestão de como ajustar a sua condição:

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

    // Verifica se os campos foram preenchidos corretamente
    if (isNaN(quantidade) || isNaN(de) || isNaN(ate)) {
        alert('Favor, preencher todos os campos com números válidos!');
        return;
    }

    // O restante do seu código...
    let sorteados = [];
    let numero;

    if(de > ate){
        alert('O número inicial deve ser menor que o número final!');
        reiniciar();
    } else {
        for (let i = 0; i < quantidade; i++){
            numero = obterNumerosAleatorios(de, ate);

            while(sorteados.includes(numero)){
                numero = obterNumerosAleatorios(de, ate);
            }
            sorteados.push(numero);
        }
        alterarStatusBotao(); // Esta função parece estar fora do loop no seu código original
        let resultado = document.getElementById('resultado');
        resultado.innerHTML = `<label class="texto__paragrafo">Números sorteados:  ${sorteados}</label>`;
    }
}

Note que também movi a chamada alterarStatusBotao() para fora do loop for, pois ela parece ser uma ação que deve ocorrer após todos os números serem sorteados, e não a cada iteração. 💪

🎓 Para saber mais:

Grande, Luís!

Funcionou perfeitamente! É como eu estava pensando ontem: "Minha lógica até que está boa, já que a ideia está certa! Meu problema é a sintaxe da linguagem!" Eu jamais poderia imaginar que tinha de usar o "isNaN"! Mas é isso: Vivendo e aprendendo!
Obrigado pela dica!