2
respostas

Calculo de 7%

class ICCC implements Imposto {

        public function calcula(Orcamento $orcamento) {
          if($orcamento->getValor() < 1000) {
            return $orcamento->getValor() * 0.05;
          }
         else if ($orcamento->getValor() >= 1000 && $orcamento->getValor() <= 3000) {
            return $orcamento->getValor() * 0.07;
          }
          else {
            return $orcamento->getValor() * 0.08 + 30;
          }
        }
      }

Nesta linha o correto não seria || ao invés de && } else if ($orcamento->getValor() >= 1000 && $orcamento->getValor() <= 3000) {

Tipo isto ? }elseif ($orcamento->getValor() <= 1000 || $orcamento->getValor() >= 3000) {

2 respostas

Não José, acho que você se confundiu um pouquinho ai. Vamos passo a passo, ok? Vamos analisar o primeiro desconto, o de 5%

if($orcamento->getValor() < 1000)

Aqui ele pega o valor do orçamento e vê se é menor do 1000, se for ele tem o desconto de 5%, certo? Isso é tranquilo.

 else if ($orcamento->getValor() >= 1000 && $orcamento->getValor() <= 3000)

Já nessa linha que você está em duvida ele pega o valor do orçamento e compara se é maior ou igual a 1000 se for ok, mas não é suficiente para entrar no bloco e dar o desconto, porque também é preciso verificar se é menor ou igual a 3000 se essas duas comparações forem verdadeiras (se o valor do orçamento é maior ou igual a 1000 e é menor ou igual a 3000) ele aplica o desconto, repare que aqui é um intervalo, se o orçamento estiver entre 1000 e 3000 ele aplica o desconto.

E por fim o Else, se o valor do orçamento não for menor do que 1000, não estiver entre 1000 e 3000 ele aplica o desconto de 8% + 30.

Do jeito que você passou $orcamento->getValor() <= 1000 || $orcamento->getValor() >= 3000 repare que os dois lados quebram o IF, porque nos já temos a verificação se ele for menor do que mil e já temos a verificação se ele for maior do que 3000.

Não sei se ficou muito claro, mas qualquer coisa você comenta aqui, ok?

Hum, ok ficou mais claro agora, obrigado.