Abaixo segue uma sugestão de melhoria na classe main para que ao ser digitado algum valor fora de 0 e 1 o programa reconheça avise ao usuário e volte ao processamento normal:
import java.util.Collections;
import java.util.Scanner;
public class NovaPrincipal {
public static void main(String[] args) {
Scanner leitura = new Scanner(System.in);
System.out.println("Digite o limite do cartão: ");
double limite = leitura.nextDouble();
CartaoDeCredito cartao = new CartaoDeCredito(limite);
int sair = 1;
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("Compra realizada!");
boolean entradaValida = false;
while (!entradaValida) {
System.out.println("Digite 0 para sair ou 1 para continuar:");
if (leitura.hasNextInt()) { // Verifica se a entrada é um número inteiro
sair = leitura.nextInt();
if (sair == 0 || sair == 1) {
entradaValida = true; // Aceita apenas 0 ou 1
} else {
System.out.println("Valor inválido! Digite 0 para sair ou 1 para continuar.");
}
} else {
System.out.println("Entrada inválida! Por favor, digite um número.");
leitura.next(); // Descarta a entrada inválida
}
}
} else {
System.out.println("Saldo insuficiente!");
sair = 0;
}
}
System.out.println("***********************");
System.out.println("COMPRAS REALIZADAS:\n");
Collections.sort(cartao.getCompras());
for (Compra c : cartao.getCompras()) {
System.out.println(c.getDescricao() + " - " + c.getValor());
}
System.out.println("\n***********************");
System.out.println("\nSaldo do cartão: " + cartao.getSaldo());
}
}