Tomando os desafios como uma parte essencial da formação, deixo abaixo minha ideia de resolução:
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class CartaoDeCredito {
private String nomeTitular;
private double limite;
private double saldo;
private List<Produto> compras = new ArrayList<>();
public CartaoDeCredito (String nomeTitular, double limite) {
this.nomeTitular = nomeTitular;
this.limite = limite;
this.saldo = limite;
}
public void comprar (Produto produto) {
if (saldo >= produto.getPreco()) {
saldo -= produto.getPreco();
compras.add(produto);
System.out.println("Produto adquirido. \nParabéns pela compra!\n");
} else {
System.err.printf("Saldo insuficiente. \nSaldo disponível: %.2f \nValor da compra: %.2f\n", saldo,
produto.getPreco());
}
}
public void ordenarPorNome () {
compras.sort(Comparator.comparing(Produto::getDescricao));
}
public void listaDeCompras () {
if (compras.isEmpty()) {
System.err.println("NENHUMA COMPRA FOI REALIZADA");
} else {
ordenarPorNome();
System.out.println("*----Lista de compras ----*");
for (Produto produto : this.compras) {
System.out.println(produto + "\n");
}
}
}
public void verificarSaldo () {
System.out.printf("Saldo disponível: %.2f \n", getSaldo());
}
public String getNomeTitular () {
return nomeTitular;
}
public double getLimite () {
return limite;
}
public double getSaldo () {
return saldo;
}
}
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Produto {
private String descricao;
private float preco;
private static List<Produto> produtosDisponiveis = new ArrayList<>();
static {
produtosDisponiveis.add(new Produto("Camiseta", 29.99f));
produtosDisponiveis.add(new Produto("Calça Jeans", 59.99f));
produtosDisponiveis.add(new Produto("Tênis", 99.99f));
produtosDisponiveis.add(new Produto("Relógio", 149.99f));
produtosDisponiveis.add(new Produto("Mochila", 79.99f));
}
public Produto (String descricao, float preco) {
this.descricao = descricao;
this.preco = preco;
}
public Produto () {
}
public String getDescricao () {
return descricao;
}
public double getPreco () {
return preco;
}
public void ordenarPorNome() {
produtosDisponiveis.sort(Comparator.comparing(Produto::getDescricao));
}
public void listarProdutos() {
System.out.println("*---- Lista de produtos disponíveis ----*");
ordenarPorNome();
for (Produto produto : produtosDisponiveis) {
System.out.printf("Produto %d:\n%s: %.2f \n", produtosDisponiveis.indexOf(produto), produto.getDescricao()
, produto.getPreco());
}
}
@Override
public String toString () {
return "Produto: " + descricao + "\n" +
"Preço: " + preco + "\n";
}
}