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

Proyecto final - Java: trabajar con listas y colecciones de datos

Hice una propuesta mas sencilla, pero logre que funcionara:


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


public class Main{
    static ArrayList<String> productDescriptionList = new ArrayList<>();
    static ArrayList<Integer> productPriceList = new ArrayList<>();
    static int limit;
    static int cardRemainingBalance;
    static int pricesTotal;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println(pricesTotal);
        System.out.println("Card limit is:");
        limit = scanner.nextInt();
        scanner.nextLine();

        cardRemainingBalance = limit;

        makePurchase(scanner);

        scanner.close();
}

public static void makePurchase(Scanner scanner) {
    System.out.println("Product Description:");
    String productDescription = scanner.nextLine();
    productDescriptionList.add(productDescription);


    System.out.println("Product Price:");
    int productPrice = scanner.nextInt();
    scanner.nextLine();


    if (productPrice>cardRemainingBalance) {
        System.out.println("Purchase failed! Balance is insufficient");
        System.out.println("Remaining balance in card:" + cardRemainingBalance);
    } else {
        productPriceList.add(productPrice);
        cardRemainingBalance = balanceCalculator(limit);
        System.out.println("Purchase completed!");
        System.out.println("Enter 0 to exit or 1 to continue");
            int command = scanner.nextInt();
            scanner.nextLine();

            if (command == 0) {
                displaySummary(limit);}
            else {
                makePurchase(scanner);
            }
    }
}

    public static void displaySummary(int limit){

        System.out.println("******************");
        System.out.println("PURCHASES");
        for (int i = 0; i < productDescriptionList.size(); i++) {
            String productDescription = productDescriptionList.get(i);
            int productPrice = productPriceList.get(i);
            System.out.println(productDescription + " - " + productPrice);}
        System.out.println("****************************");
        System.out.println("Remaining balance in card:" + cardRemainingBalance);

    }

    public static int balanceCalculator(int limit){

        pricesTotal = productPriceList.stream()
                .mapToInt(Integer::intValue)
                .sum();

        cardRemainingBalance = limit- pricesTotal;

        return cardRemainingBalance;

    }
  }
1 respuesta

Hola Sol, espero que estés bien

¡Qué bueno que lograste que tu propuesta funcionara! Tu código parece estar bien estructurado y funcional para el propósito que mencionas. Permíteme ofrecerte algunos consejos y observaciones que podrían ayudarte a mejorar o ajustar tu proyecto:

  1. Inicialización de pricesTotal: Veo que pricesTotal se imprime al inicio del programa, pero no se ha calculado aún, por lo que siempre mostrará 0 en ese momento. Podrías considerar calcularlo después de la primera compra o eliminar esa línea de impresión inicial.

  2. Uso de Collections: Aunque importaste Collections, no parece que lo estés utilizando en tu código actual. Si no es necesario, podrías eliminar esa importación para mantener el código limpio.

  3. Validación de entrada: Sería útil agregar validaciones para las entradas del usuario, como verificar que el precio del producto y el límite de la tarjeta sean números positivos. Esto puede evitar errores inesperados durante la ejecución.

  4. Mejoras en la interfaz de usuario: Podrías considerar agregar mensajes más descriptivos o instrucciones claras para guiar al usuario a través del proceso de compra.

  5. Estructura del código: Aunque tu código es funcional, podrías considerar dividirlo en más métodos para mejorar la legibilidad y el mantenimiento. Por ejemplo, podrías tener métodos separados para validar la entrada, actualizar el saldo, etc.

Aquí tienes un ejemplo de cómo podrías mejorar la validación de entrada para el precio del producto:

int productPrice;
while (true) {
    System.out.println("Product Price:");
    try {
        productPrice = Integer.parseInt(scanner.nextLine());
        if (productPrice < 0) {
            System.out.println("Price cannot be negative. Please enter a valid price.");
        } else {
            break;
        }
    } catch (NumberFormatException e) {
        System.out.println("Invalid input. Please enter a numeric value.");
    }
}

Espero que estas sugerencias te sean útiles. ¡Sigue adelante con tu proyecto!

Espero haber ayudado y buenos estudios!