Muito legal a forma de cada um pensar na solução do problema, veja a minha. Classe Cartao
package org.example.models;
import java.util.ArrayList;
import java.util.List;
public class Cartao {
    private double limite;
    private double saldo;
    private List<Compra> compras;
    private double total;
    public Cartao(double limite) {
        this.limite = limite;
        this.saldo = limite;
        this.compras = new ArrayList<>();
    }
    public boolean lancaCompra(Compra compra) {
        if (this.saldo < compra.getValor()) {
            System.out.println("Saldo insuficiente!! :(");
            System.out.println(compras.toString());
            System.out.println("**********************");
            System.out.println("Compra NAÔ realizada!!");
            System.out.println("**********************");
        }
        if (this.saldo > compra.getValor()) {
            this.saldo -= compra.getValor();
            this.compras.add(compra);
            System.out.println("**********************");
            System.out.println("Compra realizada!!");
            System.out.println("**********************");
            this.total = this.total + compra.getValor();
            return true;
        } else {
            return false;
        }
    }
    public double getLimite() {
        return limite;
    }
    public double getSaldo() {
        return saldo;
    }
    public List<Compra> getCompras() {
        return compras;
    }
    @Override
    public String toString() {
        return "COMPRAS REALIZADAS:\n"+"Lista de compras: "+ compras + "\n Saldo do cartão: "+ this.saldo
                ;
    }
}
Classe Compras
package org.example.models;
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;
    }
    @Override
    public String toString() {
        return  "\nDescrição: " + descricao +
                "\n valor: " + valor ;
    }
}
Classe Main
package org.example;
import org.example.models.Cartao;
import org.example.models.Compra;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Bom dia");
        System.out.println("***** Bem Vindo *****");
        System.out.println("Digite o limite do cartão: ");
        double limite = sc.nextDouble();
        Cartao carta = new Cartao(limite);
        int resposta = 1;
        while (resposta == 1) {
            System.out.println("Digite a descrição da compra: ");
            String descricao = sc.next();
            System.out.println("Digite o valor da compra: ");
            double valor = sc.nextDouble();
            Compra compra = new Compra(descricao, valor);
            carta.lancaCompra(compra);
            System.out.println("Digite 0 para sair ou 1 para continuar");
            resposta = sc.nextInt();
            if (resposta == 0) {
                System.out.println(carta.toString());
                System.out.println("Fim do programa");
                resposta = 0;
            }
        }
    }
} 
            