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

Quiero realizar un encapsulamiento del mensaje mostrado al final del bucle para no escribir el código dos veces pero no sé cómo

Hay dos mensajes iguales que se muestran al decidir salir de la aplicación o al quedarse el usuario sin saldo. Mi cuestión aquí es que no sé cómo hacer que ese mensaje no lo tenga que escribir dos veces, sino solo una definido como método o de otra manera para que ni código sea más limpio y corto. Dejo mi código: Sí, tengo otra clase para las compras.

import java.util.*;

public class Principal {
    public static void main(String[] args) {

        Scanner cliente = new Scanner(System.in);

        ///////////////// try de Map

        Map<Integer, Compra> intento = new TreeMap<>(Comparator.reverseOrder());

        //////////////////////////


    System.out.println("Escriba el límite de la tarjeta:");
    int limiteDeSaldo = cliente.nextInt();
    cliente.nextLine(); // Limpiar el buffer

// Inicio del bucle
        while (true) {
    System.out.println("Escriba la descripción de la compra:");
    String articulo = cliente.nextLine();

    System.out.println("Escriba el valor de la compra:");
    int valorDeCompra = cliente.nextInt();
    cliente.nextLine(); // Limpiar el buffer

    if (valorDeCompra <= limiteDeSaldo) {
        limiteDeSaldo -= valorDeCompra;
        System.out.println("¡Compra Realizada!");
    } else {
        System.out.println("¡Saldo insuficiente!");
        System.out.println("**************");
        System.out.println("COMPRAS REALIZADAS:");
        for (Compra compra : intento.values()) {
            System.out.println(compra);
        }
        System.out.println("**************");
        System.out.println("Saldo de tarjeta: " + limiteDeSaldo);
        break;
    }

    // Introducir el guardado de clave - valor
    intento.put(valorDeCompra, new Compra(articulo, valorDeCompra));

    System.out.println("Escriba 0 para salir o 1 para continuar");
    int salida = cliente.nextInt();
    cliente.nextLine(); // Limpiar el buffer
            if (salida == 0) {
                System.out.println("**************");
                System.out.println("COMPRAS REALIZADAS:");
                for (Compra compra : intento.values()) {
                    System.out.println(compra);
                }
                System.out.println("**************");
                System.out.println("Saldo de tarjeta: " + limiteDeSaldo);
                break;
            }
        }
    }
}
1 respuesta

¡Hola Brandon, espero que estés bien!

Entiendo tu duda sobre cómo evitar escribir el mismo mensaje dos veces al final del bucle. Una forma de resolver esto es creando un método para mostrar el resumen de las compras y el saldo. Puedes definir un método fuera del main que se encargue de imprimir esta información, de modo que puedas llamar a este método en ambos lugares donde actualmente estás imprimiendo el mismo mensaje.

Aquí tienes un ejemplo de cómo podrías hacerlo:

public class Principal {
    // ... (resto del código)

    public static void main(String[] args) {
        // ... (resto del código)

        while (true) {
            // ... (resto del código)

            if (valorDeCompra <= limiteDeSaldo) {
                // ... (resto del código)
            } else {
                System.out.println("¡Saldo insuficiente!");
                mostrarResumenDeCompras(intento, limiteDeSaldo);
                break;
            }

            // ... (resto del código)

            if (salida == 0) {
                mostrarResumenDeCompras(intento, limiteDeSaldo);
                break;
            }
        }
    }

    // Método para mostrar el resumen de compras y saldo
    private static void mostrarResumenDeCompras(Map<Integer, Compra> compras, int saldo) {
        System.out.println("**************");
        System.out.println("COMPRAS REALIZADAS:");
        for (Compra compra : compras.values()) {
            System.out.println(compra);
        }
        System.out.println("**************");
        System.out.println("Saldo de tarjeta: " + saldo);
    }
}

En este ejemplo, he creado un método llamado mostrarResumenDeCompras que recibe como parámetros el mapa de compras y el saldo. Este método se encarga de imprimir el resumen de las compras y el saldo, evitando así repetir el mismo código en dos lugares distintos.

Espero que esta solución te ayude a limpiar y acortar tu código. ¡Buena suerte con tu aplicación de compras en Java!

Espero haber ayudado y buenos estudios!