Yo decidí seguir una vía propia para resolver el ejercicio, a continuación dejo mi código:
Clase Articulo
package com.aluracursos.modelos;
public class Articulo implements Comparable<Articulo> {
private String nombre;
private double precio;
public Articulo(String nombre, double precio) {
this.nombre = nombre;
this.precio = precio;
}
public String getNombre() {
return nombre;
}
public double getPrecio() {
return precio;
}
@Override
public String toString() {
return "Nombre producto: " + getNombre() + ", Precio: " + getPrecio();
}
@Override
public int compareTo(Articulo otroArticulo) {
return Double.valueOf(this.getPrecio()).compareTo(Double.valueOf(otroArticulo.getPrecio()));
}
}
Clase Tarjeta
package com.aluracursos.modelos;
public class Tarjeta {
private double saldoTotal;
public Tarjeta(double saldoTotal) {
this.saldoTotal = saldoTotal;
}
public double getSaldoTotal() {
return saldoTotal;
}
public void setSaldoTotal(double saldoTotal) {
this.saldoTotal = saldoTotal;
}
public double realizarPago(double monto) {
if (saldoTotal >= monto) {
saldoTotal = saldoTotal - monto;
return saldoTotal;
} else {
System.out.println("SALDO INSUFICIENTE");
return saldoTotal; // Devuelve el saldo actual sin cambios
}
}
}
Clase Main
import com.aluracursos.modelos.Articulo;
import com.aluracursos.modelos.Tarjeta;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Tarjeta tarjeta = new Tarjeta(0);
List<Articulo> listaArticulos = new ArrayList<>();
int opcion = 0;
String nombreProducto;
double precioProducto;
ingresarSaldoTarjeta(scanner, tarjeta);
do {
System.out.println("Escribe el nombre del articulo");
nombreProducto = scanner.nextLine();
System.out.println("Escribe el precio del articulo");
precioProducto = scanner.nextDouble();
scanner.nextLine();
if (tarjeta.getSaldoTotal() >= precioProducto && opcion != 2) {
tarjeta.realizarPago(precioProducto);
Articulo producto = new Articulo(nombreProducto, precioProducto);
listaArticulos.add(producto);
System.out.println("COMPRA REALIZADA EXITOSAMENTE");
System.out.println("Escribe 1 para agregar otro articulo, 2 para salir");
opcion = scanner.nextInt();
scanner.nextLine();
} else {
System.out.println("SALDO INSUFICIENTE");
break;
}
} while (opcion != 2);
mostrarComprasRealizadas(listaArticulos, tarjeta);
scanner.close();
}
static void ingresarSaldoTarjeta(Scanner scanner, Tarjeta tarjeta) {
System.out.print("Ingrese el limite de saldo de su tarjeta: ");
double limiteTarjeta = scanner.nextDouble();
tarjeta.setSaldoTotal(limiteTarjeta);
scanner.nextLine();
}
static void mostrarComprasRealizadas(List<Articulo> listaArticulos, Tarjeta tarjeta) {
System.out.println("***************************");
System.out.println("COMPRAS REALIZADAS EFECTIVAMENTE:");
Collections.sort(listaArticulos);
for (Articulo articulo : listaArticulos) {
System.out.println(articulo);
}
System.out.println("Saldo restante tarjeta: " + tarjeta.getSaldoTotal());
}
}