Boa Tarde, gostaria de compartilhar minha abordagem para o projeto do cartão de crédito
public class CartaoDeCredito {
private int limite;
private int saldo;
private final List<Compra> compras;
public CartaoDeCredito(int limite) {
this.limite = limite;
this.saldo = 0;
this.compras = new ArrayList<>();
}
public int getLimite() {
return limite;
}
private boolean limiteSuficiente(Compra compra) {
return saldo < limite && limite > 0 && compra.getValor() <= limite;
}
public void adicionarCompra(Compra compra) {
if (limiteSuficiente(compra)) {
compras.add(compra);
limite -= compra.getValor();
saldo += compra.getValor();
} else {
ExceptionHandler.handleLimiteInsuficiente();
}
}
public void imprimirCompras() {
compras.forEach(IO::println);
}
private void ordenaCompras() {
compras.sort(Comparator.reverseOrder());
}
public void imprimemComprasOrdenadas() {
ordenaCompras();
imprimirCompras();
}
@Override
public String toString() {
return "Cartao{" + "limite=" + limite + ", compras=" + compras + '}';
}
}
public class Compra implements Comparable<Compra> {
private String produto;
private double valor;
public Compra(String produto, int valor) {
this.produto = produto;
this.valor = valor;
}
public Double getValor() {
return valor;
}
@Override
public String toString() {
return produto + " - R$ " + valor;
}
@Override
public int compareTo(Compra outraCompra) {
return getValor().compareTo(outraCompra.getValor());
}
}