En este desafío desarrollé una aplicación de compras con tarjeta de crédito donde apliqué conceptos como constructores, encapsulamiento y uso de listas (ArrayList). Implementé la interfaz Comparable para poder ordenar las compras por valor usando Collections.sort(). Además, reforcé el uso de ciclos, validaciones y métodos que retornan boolean para controlar el flujo del programa según el saldo disponible.
Compra.java
package desafio;
public class Compra implements Comparable<Compra> {
private double valor;
private String descripcion;
public Compra(double valor, String descripcion) {
this.valor = valor;
this.descripcion = descripcion;
}
public double getValor() {
return valor;
}
public String getDescripcion() {
return descripcion;
}
@Override
public int compareTo(Compra otraCompra) {
return Double.valueOf(this.valor)
.compareTo(Double.valueOf(otraCompra.getValor()));
}
@Override
public String toString() {
return "Compra: " + descripcion + " - S/ " + valor;
}
}
TarjetaDeCredito.java
package desafio;
import java.util.ArrayList;
import java.util.List;
public class TarjetaDeCredito {
private double limite;
private double saldo;
private List<Compra> listaDeCompras;
public TarjetaDeCredito(double limite) {
this.limite = limite;
this.saldo = limite;
this.listaDeCompras = new ArrayList<>();
}
public double getSaldo() {
return saldo;
}
public List<Compra> getListaDeCompras() {
return listaDeCompras;
}
public boolean lanzarCompra(Compra compra) {
if (this.saldo >= compra.getValor()) {
this.saldo -= compra.getValor();
this.listaDeCompras.add(compra);
return true;
} else {
return false;
}
}
}
Principal.java
package desafio;
import java.util.Collections;
import java.util.Scanner;
public class Principal {
public static void main(String[] args) {
Scanner lectura = new Scanner(System.in);
System.out.println("Ingrese el límite de la tarjeta:");
double limite = lectura.nextDouble();
TarjetaDeCredito tarjeta = new TarjetaDeCredito(limite);
int opcion = 1;
while (opcion != 0) {
System.out.println("Ingrese la descripción de la compra:");
lectura.nextLine(); // limpiar buffer
String descripcion = lectura.nextLine();
System.out.println("Ingrese el valor de la compra:");
double valor = lectura.nextDouble();
Compra compra = new Compra(valor, descripcion);
boolean compraRealizada = tarjeta.lanzarCompra(compra);
if (compraRealizada) {
System.out.println("Compra realizada!");
System.out.println("Saldo disponible: S/ " + tarjeta.getSaldo());
} else {
System.out.println("Saldo insuficiente!");
break;
}
System.out.println("Digite 0 para salir o 1 para continuar");
opcion = lectura.nextInt();
}
System.out.println("\n***** RESUMEN DE COMPRAS *****");
Collections.sort(tarjeta.getListaDeCompras());
for (Compra c : tarjeta.getListaDeCompras()) {
System.out.println(c);
}
System.out.println("\nSaldo final: S/ " + tarjeta.getSaldo());
}
}