Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Desafio pratica 1 - Verificar o valor da quantidade

Aqui, em negrito , usei o isNan mas notei algo, não foi aceito no campo de quantidade nenhuma letra exceto a letra "E" gostaria de saber se isso é normal ou um caso a parte.

let limitQtd = 5;
function comprar(){
    
    let cpf="2"
    
    let tipo = document.getElementById("tipo-ingresso");
    // converte para inteiro(parseInt) e pegar o valor inserido(value)
    let qtd = parseInt(document.getElementById("qtd").value);
   /* alert(tipo.value);// o uso do value para pegar o valor
    console.log(qtd.value);*/

    if(qtd > limitQtd){
        alert(`Apenas pode comprar ${limitQtd} por pessoa`)
        return false
    }
    
    //**Adicione uma verificação para garantir que a quantidade inserida pelo usuário seja um número positivo.
    //  Se o valor não for válido, exiba uma mensagem de erro adequada.**
    if(qtd < 0 || isNaN(qtd)){
        alert(`Erro: Insira a quantidade de ingresso`)
        return false
    }
    

    // Compra de diferentes ingressos
   
    if (tipo.value == 'pista'){
        comprarPista(qtd);
    } else if (tipo.value == 'superior'){
        comprarSuperior(qtd);
    } else { (tipo.value == 'inferior')
        comprarInferior(qtd)
    }
    verificaCPF(cpf, qtd)
}
// Arrays para armazenar os CPFs e a quantidade de ingressos
let armazenaCPF = [];
let armazenaQtIngresso = [];

function verificaCPF(cpf, qtd) {
    // Verifica se o CPF já está registrado
    let indice = armazenaCPF.indexOf(cpf);
    
    if (indice !== -1) {
        // Se o CPF já existe, soma a nova quantidade de ingressos à anterior
        let totalIngressos = armazenaQtIngresso[indice] + qtd;
        
        if (totalIngressos > limitQtd) {
            alert(`CPF ${cpf} já comprou ${armazenaQtIngresso[indice]} ingressos. 
                   O limite é ${limitQtd}. Compra não permitida.`);
            return false;
        } else {
            armazenaQtIngresso[indice] = totalIngressos;
        }
    } else {
        // Se o CPF ainda não foi registrado, adiciona ao array
        armazenaCPF.push(cpf);
        armazenaQtIngresso.push(qtd);
    }

    console.log("CPFs registrados:", armazenaCPF);
    console.log("Ingressos comprados por CPF:", armazenaQtIngresso);
    return true;
}

function comprarPista(qtd){
    // Captura o valor, converte para inteiro(parseInt) e altera o valor pois não é um formulario
    let qtdPista = parseInt(document.getElementById('qtd-pista').textContent);
    if (qtd > qtdPista){
        alert("Quantidade indisponivel para pista");
    }else{
        //Decrementa a quantidade de ingressos
        qtdPista -= qtd;
        //Recupera o elemento da pagina cm o novo valor da variavel qtdPista
        document.getElementById('qtd-pista').textContent = qtdPista;
        alert("compra realizada dom sucesso");
    }

}
function comprarSuperior(qtd){
    // Captura o valor, converte para inteiro(parseInt) e altera o valor pois não é um formulario
    let qtdSuperior = parseInt(document.getElementById('qtd-superior').textContent);
    if (qtd > qtdSuperior){
        alert("Quantidade indisponivel para Superiro");
    }else{
        qtdSuperior = qtdSuperior - qtd;
        //Recupera o elemento da pagina cm o novo valor da variavel qtdPista
        document.getElementById('qtd-superior').textContent = qtdSuperior;
        alert("compra realizada dom sucesso");
    }
}

function comprarInferior(qtd){
    // Captura o valor, converte para inteiro(parseInt) e altera o valor pois não é um formulario
    let qtdInferior = parseInt(document.getElementById('qtd-inferior').textContent);
    if (qtd > qtdInferior){
        alert("Quantidade indisponivel para Inferior");
    }else{
        qtdInferior = qtdInferior - qtd;
        //Recupera o elemento da pagina cm o novo valor da variavel qtdPista
        document.getElementById('qtd-inferior').textContent = qtdInferior;
        alert("compra realizada dom sucesso");
    }
}
2 respostas
solução!

Oi, Ivan! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Com base no que você explicou, o comportamento da letra "E" ser aceita no campo ocorre porque parseInt() lê os primeiros caracteres válidos de um número até encontrar algo que não faz parte da notação. No caso da letra "E", isso acontece por conta da notação científica (como em 1e2, que equivale a 100). Porém, se o valor for apenas "E" ou contiver letras antes de um número, o resultado será NaN.

Veja este exemplo:


console.log(parseInt("E")); // NaN
console.log(parseInt("3E2")); // 3
console.log(parseInt("1e2")); // 1

Isso acontece porque parseInt não avalia a string como número completo, mas apenas os primeiros dígitos válidos.

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

obrigado