Segunda versión adaptando y corrigiendo lo necesario con la solucion propuesta por el profesor.
Clase Main:
import Clases.Producto;
import Clases.Tarjeta;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.print("Ingrese el limite de la tarjeta: ");
double limiteTarjeta = new Scanner(System.in).nextInt();
Tarjeta tarjeta = new Tarjeta(limiteTarjeta);
boolean salir = false;
do {
System.out.println("\n --- WALMART --- ");
System.out.println("1. Realizar Compra");
System.out.println("2. Salir");
System.out.print("Opcion -> ");
int opcion = new Scanner(System.in).nextInt();
switch (opcion) {
case 1:
System.out.print("Escriba la descripcion de la compra: ");
String descripcion = new Scanner(System.in).nextLine();
System.out.print("Escriba el valor de la compra: ");
double valor = new Scanner(System.in).nextDouble();
Producto producto = new Producto(descripcion, valor);
if (tarjeta.lanzarCompra(producto)) {
System.out.println("Compra Realizada!");
} else {
System.out.println("Saldo Insuficiente!");
mostrarListaProductos(tarjeta);
System.out.println("Saldo de la Tarjeta: " + tarjeta.getSaldo());
salir = true;
}
break;
case 2:
mostrarListaProductos(tarjeta);
System.out.println("Saldo de la Tarjeta: " + tarjeta.getSaldo());
salir=true;
break;
default:
System.out.println("Opción Incorrecta, pruebe nuevamente!");
}
} while (!salir);
}
public static void mostrarListaProductos(Tarjeta tarjeta) {
//Me ordena la lista de productos del mas barato al mas caro
//Collections.sort(tarjeta.getListaCompras());
//Otra forma de ordenar la lista de productos del mas barato al mas caro
tarjeta.getListaCompras().sort(Comparator.comparing(Producto::getPrecio));
//isEmpty comprueba si la listaProductos está vacia o no
if (!tarjeta.getListaCompras().isEmpty()) {
System.out.println("\n********************");
System.out.println("COMPRAS REALIZADAS: ");
for (Producto producto : tarjeta.getListaCompras()) {
System.out.println(producto.toString());
}
System.out.println("\n********************");
System.out.println("\nGracias por su visita!");
} else {
System.out.println("\nGracias por su visita!");
}
}
}
Clase Tarjeta:
package Clases;
import java.util.ArrayList;
import java.util.List;
public class Tarjeta {
private double limite;
private double saldo;
private List<Producto> listaCompras;
public Tarjeta(double limite) {
this.limite = limite;
this.saldo = limite;
this.listaCompras = new ArrayList<>();
}
public boolean lanzarCompra(Producto prudcuto) {
if(this.saldo >= prudcuto.getPrecio()) {
this.saldo -= prudcuto.getPrecio();
this.listaCompras.add(prudcuto);
return true;
}else {
return false;
}
}
public double getSaldo() {
return saldo;
}
public List<Producto> getListaCompras() {
return listaCompras;
}
}
Clase Producto:
package Clases;
public class Producto implements Comparable<Producto> {
private String descripcion;
private double precio;
public Producto(String descripcion, double precio) {
this.descripcion = descripcion;
this.precio = precio;
}
public double getPrecio() {
return precio;
}
@Override
public String toString() {
return descripcion + " - " + precio;
}
//Para hacer la comparacion de precios entre productos
@Override
public int compareTo(Producto otroProducto) {
return Double.valueOf(this.precio).compareTo(Double.valueOf(otroProducto.precio));
}
}