Clase principal: package com.alura.desafio;
import java.util.ArrayList; import java.util.List; import java.util.Scanner;
public class Principal { public static void main(String[] args) { Scanner sc = new Scanner(System.in); List listaCompras = new ArrayList<>();
System.out.println("=== Sistema de Compras con Tarjeta de Crédito ===");
System.out.print("Ingrese el límite de su tarjeta de crédito: $");
double limite = sc.nextDouble();
sc.nextLine(); // limpiar buffer
String continuar = "si";
while (continuar.equalsIgnoreCase("si")) {
System.out.print("\nIngrese el nombre del producto: ");
String producto = sc.nextLine();
System.out.print("Ingrese el monto de la compra: $");
double monto = sc.nextDouble();
sc.nextLine(); // limpiar buffer
if (monto > limite) {
System.out.println("❌ No tiene suficiente saldo para esta compra.");
} else {
listaCompras.add(new Compras(producto, monto));
limite -= monto;
System.out.printf("✅ Compra realizada. Saldo restante: $%.2f\n", limite);
}
// Preguntar si desea continuar
System.out.print("¿Desea realizar otra compra? (si/no): ");
continuar = sc.nextLine();
// Validar si el usuario quiere salir antes de quedarse sin saldo
if (!continuar.equalsIgnoreCase("si")) {
break;
}
if (limite <= 0) {
System.out.println("⚠️ Ha alcanzado el límite de su tarjeta.");
break;
}
}
// Ordenar por producto (orden alfabético ascendente)
listaCompras.sort((c1, c2) -> c1.getProducto().compareToIgnoreCase(c2.getProducto()));
System.out.println("\n=== Lista de compras realizadas (ordenadas por producto) ===");
if (listaCompras.isEmpty()) {
System.out.println("No se realizaron compras.");
} else {
for (Compras c : listaCompras) {
System.out.printf("- %s: $%.2f\n", c.getProducto(), c.getMonto());
}
}
System.out.printf("\nSaldo restante en la tarjeta: $%.2f\n", limite);
System.out.println("Gracias por usar la aplicación. ¡Hasta pronto!");
}
}
Clase Compras: package com.alura.desafio;
public class Compras { private String producto; private double monto;
public Compras(String producto, double monto) {
this.producto = producto;
this.monto = monto;
}
public void setProducto(String producto) {
this.producto = producto;
}
public void setMonto(double monto) {
this.monto = monto;
}
public String getProducto() {
return producto;
}
public double getMonto() {
return monto;
}
}