2
respostas

dúvida em um código

Oi, pessoal! Estou com uma dúvida em um código que estou tentando implementar. Tenho que calcular um desconto com base na quantidade de milhas de um usuário para um sistema de pacotes de viagem. A regra é a seguinte:

Milhas abaixo de 5.000 não recebem desconto.

Milhas entre 5.001 e 30.000 recebem 10% de desconto.

Milhas acima de 30.000 recebem 20% de desconto.

Meu código está assim:

let porcentagemDesconto = 0;

if(quantidadeMilhas > 5000){ porcentagemDesconto = porcentagemDesconto + 10; }

if(quantidadeMilhas >= 30000){ porcentagemDesconto = porcentagemDesconto + 20; } else { porcentagemDesconto = 0; } Mas quando o número de milhas é exatamente 30.000 ou quando é 5.000, o comportamento não está correto. Alguém pode me ajudar a entender por que o desconto está sendo calculado de forma errada?

2 respostas

Boa tarde, Fernando! O problema no seu código ocorre devido à forma como a lógica está estruturada. Quando você usa o else no segundo if, ele está sendo acionado sempre que o número de milhas for inferior a 30.000, o que não corresponde à regra para 30.000 milhas, que deve receber 20% de desconto.

let porcentagemDesconto = 0;
if (quantidadeMilhas >= 30000) {
    porcentagemDesconto = 20; // Se for 30.000 ou mais -> tem 20% de desconto
} else if (quantidadeMilhas >= 5001) {
    porcentagemDesconto = 10; // Se for entre 5.001 e 30.000 -> tem 10% de desconto
}
// Você não precisa de else para o caso de milhas abaixo de 5.000, pois porcentagemDesconto já vai ser 0.

Oi Fernando, boa tarde! Tudo bem?

O problema está na lógica das suas condicionais e nos valores limites. vamos analisar por partes.

let porcentagemDesconto = 0;
 

// Aqui ele está aplicando 10% de desconto se as milhas forem maiores que 5000. 
// Então, caso a quantidade seja 30.000, ele também aplicará o desconto
if (quantidadeMilhas > 5000) { 
    porcentagemDesconto = porcentagemDesconto + 10; 
}

// Aqui ele aplica mais 20% se for maior ou igual a 30.000. 
// Porém, o desconto anterior de 10% pode ter sido aplicado antes, somando com este. 
// Isso resulta em 30% de desconto para 30.000 milhas (Não é o que queremos)!
if (quantidadeMilhas >= 30000) { 
    porcentagemDesconto = porcentagemDesconto + 20; 
} else {
  // Este else sempre será executado quando as milhas forem menores que 30.000.
  // Isso faz com que milhas entre 5.001 e 29.999 recebam 0% de desconto, 
  // mesmo que a primeira condição tenha sido verdadeira.
    porcentagemDesconto = 0; 
} 

O código corrigido:


let quantidadeMilhas = 5000;
let porcentagemDesconto = 0;

// Aqui, primeiro validamos se o valor é maior que 30.000. Caso sim, aplica o desconto de 20%.
if(quantidadeMilhas > 30000) { 
    porcentagemDesconto = porcentagemDesconto + 20;
// Se a primeira condição não for verdadeira, essa é avaliada.
// Aqui validamos se o valor está entre 5.001 e 30.000.
} else if (quantidadeMilhas > 5000) { 
    porcentagemDesconto = porcentagemDesconto + 10; 
} else { 
// Caso nenhuma das condições anteriores seja atendida, aplica-se 0% de desconto.
    porcentagemDesconto = 0; 
}

console.log(porcentagemDesconto);

Lembre-se: o código é executado linha por linha, e a ordem das condicionais altera completamente o resultado!


Dica: sempre use o console.log() para validar e achar erros (o famoso debugar haha). Aqui você poderia aplicar dentro de um if para verificar se o código está passando ou não pela condicional. Por exemplo:


if(condição) { 
    // lógica caso a condição seja favorável
    console.log('passei pela condição!!');
} else {
    // lógica caso não cumpra a condição
    console.log('não passei :(');
}