Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Sugerencia] Presentando el desafío

import java.util.*;
public class Compra {

    private double saldo;
    private String producto;
    private double precioProducto;

    int salir;
    Map<String, Double> listaCompras = new HashMap<>();
    public void realizarCompra(){
        System.out.println("Escriba el límite de la tarjeta: ");
        Scanner scanner = new Scanner(System.in);
        saldo = scanner.nextDouble();
        do {
            System.out.println("Escriba la descripción de la compra: ");
            producto = scanner.next();

            System.out.println("Escriba el valor de la compra: ");
            precioProducto = scanner.nextDouble();

            if (saldo >= precioProducto){
                saldo = saldo - precioProducto;
                listaCompras.put(producto, precioProducto);
            }else{
                System.out.println("Saldo insuficiente!!!!");
                System.out.println("----------------------");
                System.out.println("COMPRA REAlIZADA");
                mostrarListaCompras();
                System.out.println("----------------------");
                System.out.println("Saldo de la tarjeta: "+ saldo);
                return;
            }

            System.out.println("Escriba 0 para salir o 1 para continuar");
            salir = scanner.nextInt();

            if ( salir == 0){
                System.out.println("----------------------");
                System.out.println("COMPRAS REAlIZADAS");
                mostrarListaCompras();
                System.out.println("----------------------");
                System.out.println("Saldo de la tarjeta: "+ saldo);
                return;
            }
        }while(salir == 1);
    }

    public void mostrarListaCompras(){
        Map<String, Double> lista = new TreeMap<>(listaCompras);
        lista.forEach((item, precio)->{
            System.out.println(item +  " - " + precio);
        });
    }

}

public class Principal {
    public static void main(String[] args) {
        Compra compra = new Compra();
        compra.realizarCompra();
    }
}
1 respuesta

¡Hola Juan, espero que estés bien!

Tu código está bastante bien estructurado y cumple con la mayoría de los requisitos del desafío. Sin embargo, hay un pequeño detalle que podrías ajustar para que las compras se muestren ordenadas por el valor de la compra, de menor a mayor, como se menciona en el ejercicio.

Actualmente, estás utilizando un TreeMap para ordenar las compras, pero el TreeMap ordena las claves (en este caso, los nombres de los productos) en orden natural. Para ordenar las compras por el valor, podrías utilizar una lista de entradas y luego ordenarla. Aquí tienes un ejemplo de cómo podrías hacerlo:

public void mostrarListaCompras(){
    List<Map.Entry<String, Double>> lista = new ArrayList<>(listaCompras.entrySet());
    lista.sort(Map.Entry.comparingByValue());

    lista.forEach((entry) -> {
        System.out.println(entry.getKey() + " - " + entry.getValue());
    });
}

Con este cambio, las compras se mostrarán ordenadas por el valor del producto, de menor a mayor. Espero que esto te ayude a cumplir con el desafío propuesto en tu curso.

Espero ter ayudado y bons estudos!