Classe CartaoDeCredito:
public class CartaoDeCredito {
private double saldo;
private double limite;
public CartaoDeCredito(double limite){
this.limite = limite;
this.saldo = limite;
}
public boolean lancaCompra(Compra compra){
if(this.saldo >= compra.getValor()){
this.saldo -= compra.getValor();
return true;
}
return false;
}
public double getSaldo() {
return saldo;
}
}
Classe Compra:
import java.util.*;
public class Compra {
private String descricao;
private double valor;
private static List<Map<String, Double>> compras = new ArrayList<>();
public void comprei(){
Map<String, Double> map = new LinkedHashMap<>();
map.put(descricao, valor);
compras.add(map);
compras.sort(Comparator.comparingDouble(m -> m.values().iterator().next()));
}
public static void totalCompra(){
compras.forEach(map -> map.forEach((k, v) ->System.out.println(k + " - " + v)));
}
public Compra (String descricao, double valor){
this.descricao = descricao;
this.valor = valor;
}
public double getValor() {
return valor;
}
}
Classe Principal:
import java.util.Scanner;
public class Principal {
public static void main(String[] args){
Scanner leitura = new Scanner(System.in);
System.out.println("Digite o limite do cartão: ");
double limite = leitura.nextDouble();
CartaoDeCredito cartao = new CartaoDeCredito(limite);
int sair = 1;
while(sair != 0) {
System.out.println("Digite a descrição da compra:");
String descricao = leitura.next();
System.out.println("Digite o valor da compra:");
double valor = leitura.nextDouble();
Compra compra = new Compra(descricao, valor);
boolean compraRealizada = cartao.lancaCompra(compra);
if (compraRealizada) {
compra.comprei();
System.out.println("Compra realizada!");
System.out.println("Digite 0 para sair ou 1 para continuar");
sair = leitura.nextInt();
} else {
System.out.println("Saldo insuficiente!");
sair = 0;
}
}
System.out.println("***********************");
System.out.println("COMPRAS REALIZADAS:\n");
Compra.totalCompra();
System.out.println("\n***********************");
System.out.println("\nSaldo do cartão: " +cartao.getSaldo());
}
}