Boa tarde, pessoal
Tudo bem?
Segue a resolução do desafio:
  
Classe Cartao
package br.com.alura.desafio03.cartao;
public class Cartao {
private double limiteCartao;
public Cartao(double limiteCartao) {
    this.limiteCartao = limiteCartao;
}
public double getLimiteCartao() {
    return limiteCartao;
}
public void setLimiteCartao(double compra) {
    this.limiteCartao -= compra;
}
public boolean verificaLimite(double compra){
    if(compra<=this.limiteCartao){
        return true;
    }
    else {
        return false;
    }
}
}
Classe Compra
package br.com.alura.desafio03.compra;
import java.util.List;
public class Compra implements Comparable { private String nome; private double valor;
//Método construtor
public Compra(String nome, double valor) {
    this.nome = nome;
    this.valor = valor;
}
public String getNome() {
    return nome;
}
public double getValor() {
    return valor;
}
public boolean verificaSeHaCompra(List<Compra> lista){
    if(lista.isEmpty())
        return true;
    else
        return false;
}
@Override
public String toString() {
    return "\n" +getNome() + " - " + getValor()+"\n";
}
@Override
public int compareTo(Compra outraCompra) {
    return Double.valueOf(this.getValor()).compareTo(Double.valueOf(outraCompra.getValor()));
}
}
Classe Principal
package br.com.alura.desafio03;
import br.com.alura.desafio03.cartao.Cartao; import br.com.alura.desafio03.compra.Compra;
import java.util.*;
public class Principal { public static void main(String[] args) { Scanner entrada = new Scanner(System.in); int opcao=0; double limiteCartao=0; List listaCompra = new ArrayList<>(); System.out.print("Digite o limite do cartão: ");
    limiteCartao = entrada.nextDouble();
    Cartao cartao = new Cartao(limiteCartao);
    do {
            if(limiteCartao<=0){
                    System.out.println("O valor do limite do cartão tem que ser maior do que zero!");
            }else{
                System.out.print("Digite a descrição da compra: ");
                String nomeCompra = entrada.next();
                double valorCompra = 0;
                do {
                    System.out.print("Digite o valor da compra: ");
                    valorCompra = entrada.nextDouble();
                    if (valorCompra <=0) {
                        System.out.println("O valor da compra tem que maior do zero!");
                    }
                }while (valorCompra <=0);
                Compra compra1 = new Compra(nomeCompra,valorCompra);
                if(cartao.verificaLimite(valorCompra)){
                    cartao.setLimiteCartao(valorCompra);
                    listaCompra.add(compra1);
                    System.out.println("Compra realizada!");
                    System.out.println("Digite 0 para sair ou 1 para continuar");
                    opcao = entrada.nextInt();
                }else {
                    System.out.println("Saldo insuficiente!");
                }
            }
    }while (opcao==1);
    System.out.println("COMPRAS REALIZADAS:");
    if(listaCompra.isEmpty())
        System.out.println("Não há compras no cartão");
    else{
        Collections.sort(listaCompra);
        System.out.println(listaCompra);
    }
    System.out.println("Saldo do cartão: "+ cartao.getLimiteCartao());
}
}