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

Desafío final: Propuesta de solución

// Clase Main

package com.compras.alura;

import com.compras.alura.modelos.Compra;
import com.compras.alura.modelos.Tarjeta;

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

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList<Compra> lista = new ArrayList<>();
        int opcion = 1;

        System.out.println("Escriba el límite de la tarjeta: ");
        int limite = scanner.nextInt();
        scanner.nextLine();
        Tarjeta tarjeta = new Tarjeta(limite);
        tarjeta.setLimite(limite);
        tarjeta.setSaldo(limite);

        while (opcion != 0 && tarjeta.getSaldo() > 0) {

            System.out.println("Escriba la descripción de la compra: ");
            String descripcion = scanner.nextLine();
            System.out.println("Escriba el valor de la compra: ");
            double monto = scanner.nextDouble();
            scanner.nextLine();

            if (monto > tarjeta.getSaldo()) {
                System.out.println("Saldo insuficiente para realizar la compra. Saldo actual: " + tarjeta.getSaldo());
            } else {
                Compra producto = new Compra(descripcion, monto);
                lista.add(producto);

                System.out.println("¡Compra realizada!");
                tarjeta.setSaldo(tarjeta.getSaldo() - monto);

                System.out.println("Escriba 0 para salir o 1 para continuar");
                opcion = scanner.nextInt();
                scanner.nextLine();
            }
        }
        System.out.println("***********************");
        System.out.println("¡Gracias por su compra!\n");
        Collections.sort(lista);
        System.out.println("Compras realizadas: \n");
        lista.forEach(producto -> System.out.println(producto.toString()));

        System.out.println("\n***********************");
        System.out.println("Saldo de la tarjeta: " + tarjeta.getSaldo());
    }
}

// Clase Compra

package com.compras.alura.modelos;

import java.util.ArrayList;

public class Compra implements Comparable<Compra> {
    private String descripcion;
    private double monto;

    public Compra(String descripcion, double monto) {
        this.setNombre(descripcion);
        this.setPrecio(monto);
    }

    public void setNombre(String descripcion) {
        this.descripcion = descripcion;
    }

    public String getNombre() {
        return this.descripcion;
    }

    public double getPrecio() {
        return monto;
    }

    public void setPrecio(double monto) {
        this.monto = monto;
    }

    @Override
    public String toString() {
        return this.getNombre() + " - " + this.getPrecio();
    }

    @Override
    public int compareTo(Compra otraCompra) {
        return this.getNombre().compareTo(otraCompra.getNombre());
    }
}

// Clase Tarjeta

package com.compras.alura.modelos;

public class Tarjeta {
    private double limite;
    private double saldo;

    public Tarjeta(int limite) {
       this.limite = limite;
    }

    public double getSaldo() {
        return saldo;
    }

    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }

    public double getLimite() {
        return limite;
    }

    public void setLimite(double limite) {
        if (limite <= 0) {
            throw new IllegalArgumentException("No se permiten montos menores o iguales a 0");
        } else {
            this.limite = limite;
        }
    }
}
1 respuesta
solución!

Hola Enmanuel, espero que estés bien

¡Espero que estés bien! He revisado tu código y parece que estás trabajando en un proyecto para gestionar compras con una tarjeta de crédito. Todo parece estar bastante bien estructurado. Sin embargo, aquí hay algunas sugerencias que podrían ayudarte a mejorar o verificar el funcionamiento de tu código:

  1. Verificación de Entrada: Asegúrate de manejar posibles excepciones cuando el usuario introduce datos. Por ejemplo, si el usuario introduce un valor no numérico cuando se espera un número, el programa podría lanzar una excepción. Podrías usar un try-catch para manejar estas situaciones.

    try {
        int limite = scanner.nextInt();
    } catch (InputMismatchException e) {
        System.out.println("Por favor, ingrese un número válido.");
        scanner.next(); // Limpiar el scanner
        continue; // Volver a pedir la entrada
    }
    
  2. Validación de Opción: Cuando pides al usuario que introduzca 0 para salir o 1 para continuar, asegúrate de que no introduzca otro número. Puedes agregar una verificación adicional:

    while (opcion != 0 && opcion != 1) {
        System.out.println("Opción no válida. Escriba 0 para salir o 1 para continuar");
        opcion = scanner.nextInt();
        scanner.nextLine();
    }
    
  3. Uso de Collections.sort: Estás utilizando Collections.sort(lista); para ordenar las compras por descripción. Si prefieres ordenar por monto, puedes modificar el método compareTo en la clase Compra:

    @Override
    public int compareTo(Compra otraCompra) {
        return Double.compare(this.getPrecio(), otraCompra.getPrecio());
    }
    
  4. Consistencia en los Nombres de Métodos: En la clase Compra, los métodos setNombre y getNombre podrían ser renombrados a setDescripcion y getDescripcion para mantener la consistencia con el nombre del atributo descripcion.

Espero que estas sugerencias te sean útiles. ¡Sigue adelante con tu proyecto y disfruta del proceso de aprendizaje!

Espero haber ayudado y buenos estudios!