Olá, pessoal. Tudo bem? Disponibilizando aqui minha ideia de solução do desafio proposto: Obs: utilizei o próprio limite do cartão como sendo o saldo restante. Eu entendo a diferença das duas variáveis, mas como não utilizariamos o limite para mais nada, decidi trabalhar somente com ele.
Classe do Cartão de Crédito
package br.com.joaovictor.comprasCartaoCredito.modelos;
public class CartaoDeCredito {
private double limiteCartao;
public CartaoDeCredito(double limiteCartao) {
this.limiteCartao = limiteCartao;
}
public double getLimiteCartao() {
return limiteCartao;
}
public boolean temLimite (double valor) {
if (valor>this.limiteCartao || this.limiteCartao==0) {
return false;
}
return true;
}
public void diminuiLimite (double valor) {
limiteCartao-=valor;
}
}
Classe das Compras
package br.com.joaovictor.comprasCartaoCredito.modelos;
import org.w3c.dom.ls.LSOutput;
public class Compra {
private String descricao;
private double valor;
public Compra (String descricao, double valor) {
this.descricao = descricao;
this.valor = valor;
}
public String getDescricao() {
return descricao;
}
public double getValor() {
return valor;
}
}
Classe principal
package br.com.joaovictor.comprasCartaoCredito.principal;
import br.com.joaovictor.comprasCartaoCredito.modelos.CartaoDeCredito;
import br.com.joaovictor.comprasCartaoCredito.modelos.Compra;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Digite o limite do cartão: ");
double limiteCartao = sc.nextDouble();
CartaoDeCredito meuCartao = new CartaoDeCredito(limiteCartao);
boolean queroContinuar = true;
boolean temLimite = true;
List<Compra> minhaCompra = new ArrayList<>();
do {
System.out.print("\nDigite a descrição da compra: ");
sc.nextLine();
String descricaoCompra = sc.nextLine();
System.out.print("Digite o valor da compra: ");
double valorCompra = sc.nextDouble();
temLimite = meuCartao.temLimite(valorCompra);
if (temLimite) {
minhaCompra.add(new Compra(descricaoCompra, valorCompra));
System.out.println("Compra realizada!");
meuCartao.diminuiLimite(valorCompra);
System.out.print("\nDigite 0 para sair ou 1 para continuar: ");
int opcaoEscolhida = sc.nextInt();
if (opcaoEscolhida == 0) {
queroContinuar = false;
}
}
else {
System.out.println("Desculpe, mas você não tem limite!");
}
} while(temLimite && queroContinuar);
minhaCompra.sort(Comparator.comparing(Compra::getValor));
System.out.println("\n***********************");
System.out.println("COMPRAS REALIZADAS:");
System.out.println();
for (Compra x : minhaCompra) {
System.out.println(x.getDescricao() + " - R$ " + x.getValor());
}
System.out.println("\n***********************");
System.out.println("Saldo do cartão: R$ " + meuCartao.getLimiteCartao());
sc.close();
}
}