Percebi problemas de lógica no código do projeto final.
A aplicação encerrava ao detectar saldo insuficiente, mesmo quando a compra era igual ao saldo. Além disso, não permitia novas tentativas quando o valor era maior que o saldo disponível.
Corrigi isso ajustando o método lancaCompra e o while.
Agora, o saldo atualizado aparece a cada compra, e o usuário pode tentar novamente com um valor menor ou encerrar a aplicação. Quando o valor da compra é o mesmo do saldo , o saldo zera e o sistema exibe a lista final e encerra.
//if alterado para >=
public boolean lancaCompra(Compra compra) {
if (this.saldo >= compra.getValor()) {
this.saldo -= compra.getValor();
this.compras.add(compra);
return true;
}
return false;
}
//looping modificado
while (sair != 0) {
System.out.println("Digite a descrição da compra:");
String descricao = leitura.next();
System.out.println("Digite o valor da compra:");
double valor = leitura.nextDouble();
Compra compra = new Compra(descricao, valor);
boolean compraRealizada = cartao.lancaCompra(compra);
if (compraRealizada) {
System.out.println("\nCompra realizada!");
if (cartao.getSaldo() == 0) {
System.out.println("\nSaldo zerado! Encerrando compras...\n");
sair = 0;
} else {
System.out.println("Saldo atual: " + cartao.getSaldo());
System.out.println("\nDigite 1 para continuar ou 0 para sair:");
sair = leitura.nextInt();
}
} else {
System.out.println("\nSaldo insuficiente!\n");
System.out.println("Seu saldo atual é: " + cartao.getSaldo());
System.out.println("""
\nDeseja realizar uma compra de valor menor?
(1 para continuar / 0 para sair)
""");
sair = leitura.nextInt();
}
}