Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
2
respuestas

[Sugerencia] Mi propuesta de solución...

import java.util.Scanner;

public class TheBank {
    public static void main(String[] args) {
        var scanner = new Scanner(System.in);
        var client = "Wilmar Zapata";
        var tipoCuenta = "Corriente";
        double saldo = 1599.994;
        var opt = 0;

        showHeader(client, tipoCuenta, saldo);

        while(opt != 9) {
            showOptions();
            try {
                opt = scanner.nextInt();
            } catch (Exception _) {
                System.out.println("Opción no válida, ¡intenta de nuevo!");
                scanner.nextLine();
            }

            switch (opt) {
                case 1 -> System.out.printf("%nEl saldo actualizado es: $ %.2f%n%n", saldo);
                case 2 -> {
                    System.out.println("¿Cuál es el monto que desea retirar?");
                    var monto = getMount(scanner);
                    if (monto > saldo) {
                        System.out.printf("Saldo insuficiente!%n%n");
                        break;
                    }
                    if (monto > -1) {
                        saldo -= monto;
                        System.out.printf("Saldo restante: $ %.2f%n%n", saldo);
                    } else System.out.printf("%nEl saldo actualizado es: $ %.2f%n%n", saldo);
                }
                case 3 -> {
                    System.out.println("¿Cuál es el monto que desea depositar?");
                    var monto = getMount(scanner);
                    if (monto > -1) saldo += monto;
                    System.out.printf("%nEl saldo actualizado es: $ %.2f%n%n", saldo);
                }
                case 9 -> System.out.println(
                        "Finalizando el programa... muchas gracias por utilizar nuestros servicios"
                );
                default -> System.out.printf("Opción no válida, ¡intenta de nuevo!%n%n");
            }
        }

        scanner.close();
    }

    private static double getMount(Scanner scanner) {
        try {
            return scanner.nextDouble();
        } catch (Exception _) {
            System.out.println("Monto no válido, ¡intenta de nuevo!");
            scanner.nextLine();
            return -1;
        }
    }

    private static void showOptions() {
        System.out.printf("""
                ** Escriba el número de la opción deseada **
                1. Consultar saldo
                2. Retirar
                3. Depositar
                9. Salir
                
                """
        );
    }

    private static void showHeader(String client, String tipoCuenta, double saldo) {
        System.out.printf("""
                %n*******************************************************************
                
                Nombre del cliente: %s
                Tipo de cuenta: %s
                Saldo disponible: %.2f
                
                *******************************************************************%n
                """, client, tipoCuenta, saldo
        );
    }
}
2 respuestas

Hola Wilmar, espero que estés bien

¡Gracias por compartir tu propuesta de solución! Tu código para la aplicación bancaria se ve muy bien estructurado y parece que has aplicado correctamente los conceptos que aprendiste en la lección. Aquí tienes algunas sugerencias y observaciones que podrían ayudarte a mejorar aún más tu programa:

  1. Validación de Entrada: Ya has implementado una validación básica para las entradas no válidas con scanner.nextLine() después de capturar una excepción, lo cual es excelente para evitar que el programa falle. Podrías considerar agregar mensajes más detallados o un bucle que permita al usuario volver a intentar hasta que ingrese un valor válido.

  2. Uso de var: Has utilizado var para la inferencia de tipos, lo cual es una práctica moderna y limpia en Java. Sin embargo, asegúrate de que esto no cause confusión en el contexto del aprendizaje, especialmente si estás compartiendo este código con otros que podrían no estar familiarizados con esta característica.

  3. Lógica de Negocio: La lógica para retirar y depositar parece estar bien implementada. Solo asegúrate de que el monto ingresado sea positivo antes de realizar la operación, lo cual ya haces al verificar si es mayor a -1.

  4. Formato de Salida: Utilizar System.out.printf para formatear la salida es una excelente manera de asegurarte de que los números decimales se muestren correctamente.

  5. Cerrar el Scanner: Has cerrado correctamente el scanner al final del programa, lo cual es una buena práctica para liberar recursos.

Tu código ya está bastante bien, pero si quisieras llevarlo un paso más allá, podrías considerar implementar una clase separada para representar una cuenta bancaria, encapsulando los detalles de la cuenta y las operaciones de depósito y retiro dentro de esa clase.

Espero que estas sugerencias sean útiles y te ayuden a seguir mejorando. ¡Bons estudios!

Hola Brenda me alegra que seas detallista y hagas la revisión a las propuestas, muchas gracias por ello.

  1. Validación de entrada: El scanner.nextLine() permite que no se quede en un ciclo infinito entrando siempre al catch ya que no cambia el valor de la variable opt. De la manera propuesta continúa mostrando las opciones hasta que elija una opción válida, escuchando de nuevo el teclado del usuario.
  2. Uso de var: Tendré en cuenta esta sugerencia, tienes razón, hasta el momento no han explicado esta parte en el curso y posiblemente muchos no conocen la inferencia de tipos con var, es algo que investigando me encontré y me pareció bastante útil en muchos casos.
  3. Lógica de Negocio: Así es, usé el -1 como retorno del método getMount cuando hay algún error con el monto digitado por el usuario.
  4. Formato de Salida: Gracias, me gustó esta manera para formatear variables dentro de un String.

Sí, lo quiero llevar un paso más allá, seguiré tu sugerencia de crear la clase CuentaBancaria, ya llegué a la parte de aplicar la orientación a objetos.

Muchas pero muchas gracias por tus sugerencias Brenda.