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

Desafío: construyendo una nueva aplicación

En este desafío desarrollé una aplicación de compras con tarjeta de crédito donde apliqué conceptos como constructores, encapsulamiento y uso de listas (ArrayList). Implementé la interfaz Comparable para poder ordenar las compras por valor usando Collections.sort(). Además, reforcé el uso de ciclos, validaciones y métodos que retornan boolean para controlar el flujo del programa según el saldo disponible.

Compra.java

package desafio;

public class Compra implements Comparable<Compra> {

    private double valor;
    private String descripcion;

    public Compra(double valor, String descripcion) {
        this.valor = valor;
        this.descripcion = descripcion;
    }

    public double getValor() {
        return valor;
    }

    public String getDescripcion() {
        return descripcion;
    }

    @Override
    public int compareTo(Compra otraCompra) {
        return Double.valueOf(this.valor)
                .compareTo(Double.valueOf(otraCompra.getValor()));
    }

    @Override
    public String toString() {
        return "Compra: " + descripcion + " - S/ " + valor;
    }
}

TarjetaDeCredito.java

package desafio;

import java.util.ArrayList;
import java.util.List;

public class TarjetaDeCredito {

    private double limite;
    private double saldo;
    private List<Compra> listaDeCompras;

    public TarjetaDeCredito(double limite) {
        this.limite = limite;
        this.saldo = limite;
        this.listaDeCompras = new ArrayList<>();
    }

    public double getSaldo() {
        return saldo;
    }

    public List<Compra> getListaDeCompras() {
        return listaDeCompras;
    }

    public boolean lanzarCompra(Compra compra) {

        if (this.saldo >= compra.getValor()) {
            this.saldo -= compra.getValor();
            this.listaDeCompras.add(compra);
            return true;
        } else {
            return false;
        }
    }
}

Principal.java

package desafio;

import java.util.Collections;
import java.util.Scanner;

public class Principal {

    public static void main(String[] args) {

        Scanner lectura = new Scanner(System.in);

        System.out.println("Ingrese el límite de la tarjeta:");
        double limite = lectura.nextDouble();

        TarjetaDeCredito tarjeta = new TarjetaDeCredito(limite);

        int opcion = 1;

        while (opcion != 0) {

            System.out.println("Ingrese la descripción de la compra:");
            lectura.nextLine(); // limpiar buffer
            String descripcion = lectura.nextLine();

            System.out.println("Ingrese el valor de la compra:");
            double valor = lectura.nextDouble();

            Compra compra = new Compra(valor, descripcion);

            boolean compraRealizada = tarjeta.lanzarCompra(compra);

            if (compraRealizada) {
                System.out.println("Compra realizada!");
                System.out.println("Saldo disponible: S/ " + tarjeta.getSaldo());
            } else {
                System.out.println("Saldo insuficiente!");
                break;
            }

            System.out.println("Digite 0 para salir o 1 para continuar");
            opcion = lectura.nextInt();
        }

        System.out.println("\n***** RESUMEN DE COMPRAS *****");

        Collections.sort(tarjeta.getListaDeCompras());

        for (Compra c : tarjeta.getListaDeCompras()) {
            System.out.println(c);
        }

        System.out.println("\nSaldo final: S/ " + tarjeta.getSaldo());
    }
}
1 respuesta

¡Hola Estudiante, espero que estés bien!

Parece que has hecho un gran trabajo desarrollando tu aplicación de compras con tarjeta de crédito. Has aplicado correctamente varios conceptos importantes como constructores, encapsulamiento, uso de listas y la interfaz Comparable para ordenar las compras por valor.

Aquí hay algunas sugerencias y observaciones que podrían ayudarte a mejorar o ajustar tu aplicación:

  1. Limpieza del buffer del Scanner: Veo que ya estás limpiando el buffer del Scanner con lectura.nextLine() después de leer el límite de la tarjeta. Esto es importante para evitar problemas al leer cadenas después de números.

  2. Validación de entradas: Podrías considerar agregar validaciones adicionales para asegurarte de que el usuario ingrese valores válidos, por ejemplo, que el valor de la compra no sea negativo.

  3. Manejo de excepciones: Podrías implementar un manejo básico de excepciones para capturar posibles errores durante la entrada de datos, como InputMismatchException cuando el usuario ingresa un tipo de dato incorrecto.

  4. Orden de las compras: Has utilizado Collections.sort() para ordenar las compras por valor, lo cual es excelente. Si quisieras ordenar de manera descendente, podrías invertir la lógica en el método compareTo o utilizar Collections.reverseOrder().

  5. Mejoras en la interfaz de usuario: Podrías mejorar la interacción con el usuario mostrando un menú más detallado o confirmaciones adicionales antes de realizar una compra.

  6. Pruebas y depuración: Asegúrate de probar tu aplicación con diferentes escenarios para verificar que todo funcione como esperas.

Espero que estas sugerencias te sean útiles. ¡Sigue adelante con tu aprendizaje en Java! Espero haber ayudado y buenos estudios!