Caros, estou tentando simular caso não tenha nenhum desconto.
Porém é exibido a mensagem de erro
Valor do Orcamento: 30.0
Qtde de Produtos do orcamento: 2
Exception in thread "main" java.lang.NullPointerException
at Calculadora.DescontoPorVendaCasada.desconta(DescontoPorVendaCasada.java:21)
at Calculadora.DescontoValorMaiorQuinhentos.desconta(DescontoValorMaiorQuinhentos.java:16)
at Calculadora.DescontoCincoItens.desconta(DescontoCincoItens.java:16)
at Calculadora.CalculadoraDeDescontos.calcula(CalculadoraDeDescontos.java:17)
at Calculadora.TestaDesconto.main(TestaDesconto.java:16)
SEGUE O MEU CÓDIGO
public class DescontoPorVendaCasada implements Desconto {
private Desconto proximo;
@Override
public double desconta(Orcamento orcamento) {
if (this.buscaProduto(orcamento, "LAPIS")
&& this.buscaProduto(orcamento, "CANETA")) {
return orcamento.getValor() * 0.05;
} else {
return proximo.desconta(orcamento);
}
}
public boolean buscaProduto(Orcamento orcamento, String nome) {
for (Produto produto : orcamento.getProdutos()) {
if (produto.getNome().equals(nome))
return true;
}
return false;
}
@Override
public void proximoDesconto(Desconto desconto) {
this.proximo = proximo;
}
public class DescontoValorMaiorQuinhentos implements Desconto {
private Desconto proximo;
@Override
public double desconta(Orcamento orcamento) {
if (orcamento.getValor() >=500)
return orcamento.getValor() * 0.07;
else
return proximo.desconta(orcamento);
}
public void proximoDesconto(Desconto proximo) {
this.proximo = proximo;
}
}
public class SemDesconto implements Desconto {
@Override
public double desconta(Orcamento orcamento) {
// TODO Auto-generated method stub
return 0;
}
@Override
public void proximoDesconto(Desconto desconto) {
// nao tem!
}
}
public class DescontoCincoItens implements Desconto {
private Desconto proximo;
@Override
public double desconta(Orcamento orcamento) {
if (orcamento.getProdutos().size() >= 5)
return orcamento.getValor() * 0.10;
else
return proximo.desconta(orcamento);
}
@Override
public void proximoDesconto(Desconto proximo) {
this.proximo = proximo;
}
}
}
public interface Desconto {
double desconta(Orcamento orcamento);
void proximoDesconto (Desconto desconto);
}
public class CalculadoraDeDescontos {
public double calcula(Orcamento orcamento) {
Desconto d1 = new DescontoCincoItens();
Desconto d2 = new DescontoValorMaiorQuinhentos();
Desconto d3 = new DescontoPorVendaCasada();
Desconto d4 = new SemDesconto();
d1.proximoDesconto(d2);
d2.proximoDesconto(d3);
d3.proximoDesconto(d4);
return d1.desconta(orcamento);
}
}
public class Produto {
private String nome;
private double valor;
public Produto(String nome, double valor) {
this.nome = nome;
this.valor = valor;
}
public String getNome() {
return nome;
}
public double getValor() {
return valor;
}
}
public class TestaDesconto {
public static void main(String[] args) {
Orcamento orcamento = new Orcamento(30);
orcamento.adicionaProduto(new Produto("LAPIS", 10));
orcamento.adicionaProduto(new Produto("REGUA", 20));
CalculadoraDeDescontos calculadora = new CalculadoraDeDescontos();
System.out.println("Valor do Orcamento: " + orcamento.getValor());
System.out.println("Qtde de Produtos do orcamento: " + orcamento.getProdutos().size());
System.out.println("Valor do desconto = " + calculadora.calcula(orcamento));
}
}