Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

Proyecto final del desafío

TarjetaDeCredito.java

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 boolean lanzarCompra (Compra compra){
        if(this.saldo > compra.getValor()){
            this.saldo -= compra.getValor();
            this.listaDeCompras.add(compra);
            return true;
        }
        return false;
    }

    public double getLimite() {
        return limite;
    }

    public double getSaldo() {
        return saldo;
    }

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

Compra.java

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 String toString() {
        return "Compra: valor=" + valor +
                ", descripcion='" + descripcion;
    }

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

Principal.java

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("Escriba el limite de la tarjeta: ");
        double limite = lectura.nextDouble();
        TarjetaDeCredito tarjeta = new TarjetaDeCredito(limite);

        int salir = 1;
        while (salir != 0) {
            System.out.println("Escriba de descripcion de de la compra: ");
            String descripcion = lectura.next();

            System.out.println("Escriba el valor de la compra: ");
            Double valor = Double.valueOf(lectura.next());

            Compra compra = new Compra(valor, descripcion);
            boolean compraRealizada = tarjeta.lanzarCompra(compra);

            if (compraRealizada){
                System.out.println("Compra realizada!");
                System.out.println("Preione 0 para salir o 1 para continuar");
                salir = lectura.nextInt();
            } else {
                System.out.println("Saldo insuficiente!");
                salir = 0;
            }
        }
        System.out.println("****************************");
        System.out.println("COMPRAS REALIZADAS:\n");
        Collections.sort(tarjeta.getListaDeCompras());
        for (Compra compra : tarjeta.getListaDeCompras()) {
            System.out.println(compra.getDescripcion() + " - " + compra.getValor());
        }
        System.out.println("\n **************************");
        System.out.println("\nSaldo de la tarjeta: " + tarjeta.getSaldo());
    }
}
1 respuesta
solución!

Hola Sebastian,

¡Espero que estés bien! He revisado el código que compartiste y parece que estás trabajando en un proyecto que simula el uso de una tarjeta de crédito para realizar compras. Todo parece estar bastante bien estructurado. Sin embargo, hay un par de cosas que podrías considerar para mejorar o ajustar tu código:

  1. Entrada de Descripción: En el método main de la clase Principal, estás usando lectura.next() para capturar la descripción de la compra. Esto solo capturará una palabra. Si deseas permitir descripciones con espacios, podrías usar lectura.nextLine() después de lectura.next() para capturar el resto de la línea.

  2. Precaución con Double: Cuando estás leyendo el valor de la compra, estás usando Double.valueOf(lectura.next()). Asegúrate de que la entrada del usuario sea un número válido para evitar excepciones. Podrías considerar agregar un manejo de excepciones para mejorar la robustez del programa.

  3. Orden de las Compras: Estás usando Collections.sort() para ordenar las compras por valor. Esto está bien si deseas que las compras se ordenen de menor a mayor. Si prefieres otro criterio de ordenación, podrías ajustar el método compareTo en la clase Compra.

  4. Cierre del Scanner: No olvides cerrar el objeto Scanner al final del programa para liberar recursos. Puedes hacerlo añadiendo lectura.close(); antes de terminar el método main.

Espero que estas sugerencias te sean útiles para mejorar tu proyecto. ¡Sigue adelante con el buen trabajo!

Espero haber ayudado y buenos estudios!