Queria deixar aqui meu exemplo de como resolvi o desafio:
Classe Cartão
package br.com.alura.screenmatch.desafios.interfaces.compras;
public class Cartão implements Payment {
private double limit;
public Cartão(double limit) {
this.limit = limit;
}
@Override
public void discount(double value) {
if (limit >= value) {
limit -= value;
} else {
System.out.println("Limite insuficiente");
}
}
public double getLimit() {
return limit;
}
}
Classe Compra
package br.com.alura.screenmatch.desafios.interfaces.compras;
public class Compra implements Comparable<Compra> {
private String description;
private double value;
public Compra(String description, double value) {
this.description = description;
this.value = value;
}
public String getDescription() {
return description;
}
public double getValue() {
return value;
}
@Override
public int compareTo(Compra outraCompra) {
return Double.compare(this.value, outraCompra.value);
}
@Override
public String toString() {
return description + " - R$ " + value;
}
}
Main
package br.com.alura.screenmatch.desafios.interfaces.compras;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Digite o limite do cartão: ");
double limite = scanner.nextDouble();
Cartão cartao = new Cartão(limite);
List<Compra> compras = new ArrayList<>();
boolean continuar = true;
while (continuar) {
System.out.print("Digite o nome da compra: ");
scanner.nextLine();
String descricao = scanner.nextLine();
System.out.print("Digite o valor da compra: ");
double valor = scanner.nextDouble();
if (valor > cartao.getLimit()) {
System.out.println("Limite insuficiente!");
break;
}
Compra compra = new Compra(descricao, valor);
compras.add(compra);
cartao.discount(valor);
System.out.println("Compra realizada!");
System.out.println("Limite disponível: R$ " + cartao.getLimit());
System.out.print("Deseja realizar outra compra? (1 - Sim / 0 - Não): ");
int resposta = scanner.nextInt();
if (resposta == 0) {
continuar = false;
}
}
Collections.sort(compras);
System.out.println("\nCOMPRAS REALIZADAS:");
for (Compra compra : compras) {
System.out.println(compra);
}
System.out.println("\nLimite restante: R$ " + cartao.getLimit());
scanner.close();
}
}