Passo 1: Criar a Classe Compra
import java.text.DecimalFormat; // Importe para formatar o valor monetário
public class Compra implements Comparable<Compra> {
private String descricao;
private double valor;
// Construtor
public Compra(String descricao, double valor) {
this.descricao = descricao;
this.valor = valor;
}
// Getters
public String getDescricao() {
return descricao;
}
public double getValor() {
return valor;
}
// Sobrescrever o método toString() para uma representação legível
@Override
public String toString() {
// Formata o valor para duas casas decimais
DecimalFormat df = new DecimalFormat("0.00");
return "Descrição: " + descricao + " - Valor: R$ " + df.format(valor);
}
// Implementar a interface Comparable para ordenar por valor
@Override
public int compareTo(Compra outraCompra) {
// Compara os valores. Retorna um valor negativo se esta compra for menor,
// zero se for igual, e positivo se for maior.
// Convertemos para Double para usar o método compareTo da classe Double,
// que lida melhor com números de ponto flutuante.
return Double.valueOf(this.valor).compareTo(Double.valueOf(outraCompra.valor));
}
}
Passo 2: Criar a Classe CartaoDeCredito
import java.util.ArrayList; // Precisamos do ArrayList para a lista de compras
import java.util.List; // Usaremos a interface List para declarar a lista (bom hábito de polimorfismo)
import java.text.DecimalFormat; // Para formatar o saldo e limite na exibição
public class CartaoDeCredito {
private double limite;
private double saldo;
private List<Compra> listaDeCompras; // Usamos a interface List
// Construtor
public CartaoDeCredito(double limite) {
this.limite = limite;
this.saldo = limite; // Saldo inicial é igual ao limite
this.listaDeCompras = new ArrayList<>(); // Inicializa o ArrayList vazio
}
// Método para lançar uma compra
public boolean lancaCompra(Compra compra) {
if (this.saldo >= compra.getValor()) { // Verifica se há limite suficiente
this.saldo -= compra.getValor(); // Deduz o valor da compra do saldo
this.listaDeCompras.add(compra); // Adiciona a compra à lista
return true; // Compra realizada com sucesso
} else {
return false; // Saldo insuficiente
}
}
// Getters
public double getLimite() {
return limite;
}
public double getSaldo() {
return saldo;
}
// Getter para a lista de compras (para que possamos iterar e ordenar fora desta classe)
public List<Compra> getListaDeCompras() {
return listaDeCompras;
}
// Opcional: toString para o cartão, útil para depuração
@Override
public String toString() {
DecimalFormat df = new DecimalFormat("0.00");
return "Cartão de Crédito [Limite: R$ " + df.format(limite) + ", Saldo Disponível: R$ " + df.format(saldo) + "]";
}
}