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

[Projeto] Desafio Compras no Cartão de Crédito

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());

    }
}
2 respostas
solução!

Oi, Marcos!

Boa abordagem para o projeto. Você separou bem as responsabilidades entre CartaoDeCredito e Compra, manteve a lista de compras encapsulada e ainda usou Comparable para permitir a ordenação pelo valor da compra.

Uma dica é revisar os tipos usados para valores monetários, porque o limite está como int, enquanto o valor da compra está como double. Manter os dois no mesmo tipo, como double, evita conversões desnecessárias e deixa o cálculo do limite mais coerente.

Bons estudos!

Sucesso

Imagem da comunidade

Muito obrigado pelo retorno.

Realmente não fazia nem sentido manter o limite como int kkkk

É muito mais lógico declarar como double, incluisive o saldo...