Realizei o código da minha forma, antes de ver as aulas ou qualquer outra coisa, fiz apenas um teste e parece tá tudo certo. Inicialmente criei apenas o algoritmo que rodasse, posteriormente, fui lapidando, acrecentando o que vi necessário com base no exercício modelo. Achei bem legal ter feito dessa forma e não pareceu tão complexo por ter feito por partes: esqueleto, orientação a objetos, lista e ordenação.
public class Compras {
private String descricao;
private double valor;
public Compras(){
}
public Compras(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 descricao + " - " + valor;
}
}
void main() {
System.out.println("Digite o limite do cartão:");
Scanner input = new Scanner(System.in);
double limite = input.nextDouble();
input.nextLine();
int resposta = 0;
List<Compras> compras = new ArrayList<>();
do{
System.out.println("Digite a descrição da compra:");
String descricao = input.nextLine();
System.out.println("Digite o valor da compra:");
double valor = input.nextDouble();
if(limite <= valor){
System.out.println("Saldo insuficiente!");
break;
}else{
limite -= valor;
System.out.println("Compra realizada!");
compras.add(new Compras(descricao, valor));
}
System.out.println("Digite 0 para sair ou 1 para continuar");
resposta = input.nextInt();
input.nextLine();
}while(resposta != 0);
compras.sort(Comparator.comparing(Compras::getValor));
System.out.println("****************************************\nCOMPRAS REALIZADAS:\n");
for(Compras compra : compras){
System.out.println(compra);
}
//System.out.println(compras);
System.out.println("\n****************************************");
System.out.printf("\nSaldo do cartão: %.1f\n", limite);
}