import java.util.Scanner;

/**
 * Programa que simula una fila de supermercado utilizando vectores (arreglos).
 * Emplea únicamente instrucciones básicas de un curso introductorio de Java.
 */
public class Main {

    public static void main(String[] args) {
        // Objeto Scanner para leer los datos ingresados en consola
        Scanner scanner = new Scanner(System.in);

        // Capacidad máxima de la fila (tamaño fijo de los vectores)
        final int CAPACIDAD_MAXIMA = 10;

        // Vectores paralelos: el índice 'i' relaciona el nombre con su tiempo
        String[] nombresClientes = new String[CAPACIDAD_MAXIMA];
        int[] tiemposAtencion = new int[CAPACIDAD_MAXIMA];

        // Controla cuántos clientes están registrados actualmente en la fila
        int cantidadClientes = 0;
        int opcion = 0;

        System.out.println("=== SIMULADOR DE FILA DE SUPERMERCADO (CON VECTORES) ===");

        // Ciclo principal del menú; se repite hasta elegir la opción 4
        while (opcion != 4) {
            System.out.println("\n--- MENÚ DE OPCIONES ---");
            System.out.println("1. Registrar nuevo cliente en la fila");
            System.out.println("2. Ver clientes en la fila");
            System.out.println("3. Atender fila y calcular tiempos");
            System.out.println("4. Salir");
            System.out.print("Seleccione una opción: ");

            // Verificamos si existe una línea de entrada disponible antes de leer
            if (!scanner.hasNextLine()) {
                break;
            }

            // Leemos la opción como texto y la convertimos a número entero
            opcion = Integer.parseInt(scanner.nextLine());

            switch (opcion) {
                case 1:
                    // Validamos si todavía hay espacio disponible en los vectores
                    if (cantidadClientes < CAPACIDAD_MAXIMA) {
                        System.out.print("Ingrese el nombre del cliente: ");
                        nombresClientes[cantidadClientes] = scanner.nextLine();

                        System.out.print("Ingrese el tiempo estimado en caja (minutos): ");
                        tiemposAtencion[cantidadClientes] = Integer.parseInt(scanner.nextLine());

                        // Aumentamos el contador de clientes registrados
                        cantidadClientes++;
                        System.out.println("-> Cliente registrado exitosamente en la posición " + cantidadClientes + ".");
                    } else {
                        System.out.println("¡Alerta! La fila está llena (máximo " + CAPACIDAD_MAXIMA + " clientes).");
                    }
                    break;

                case 2:
                    // Validamos si hay al menos un cliente guardado
                    if (cantidadClientes == 0) {
                        System.out.println("La fila se encuentra vacía.");
                    } else {
                        System.out.println("\n--- CLIENTES EN ESPERA (" + cantidadClientes + "/" + CAPACIDAD_MAXIMA + ") ---");
                        // Recorremos los vectores únicamente hasta 'cantidadClientes'
                        for (int i = 0; i < cantidadClientes; i++) {
                            System.out.println((i + 1) + ". " + nombresClientes[i] + " - Tiempo estimado: " + tiemposAtencion[i] + " min");
                        }
                    }
                    break;

                case 3:
                    if (cantidadClientes == 0) {
                        System.out.println("No hay clientes para atender.");
                    } else {
                        System.out.println("\n=== INICIANDO ATENCIÓN EN CAJA ===");
                        int tiempoAcumulado = 0; // Acumula los minutos totales transcurridos

                        // Recorremos la fila en orden de llegada (desde el índice 0)
                        for (int i = 0; i < cantidadClientes; i++) {
                            System.out.println("\nAtendiendo a: " + nombresClientes[i]);
                            System.out.println("Tiempo que esperó en fila: " + tiempoAcumulado + " minutos.");
                            System.out.println("Tiempo de atención en caja: " + tiemposAtencion[i] + " minutos.");

                            // Sumamos el tiempo del cliente actual para calcular la espera del siguiente
                            tiempoAcumulado += tiemposAtencion[i];
                        }

                        // Calculamos el promedio convirtiendo 'tiempoAcumulado' a double para obtener decimales
                        double promedio = (double) tiempoAcumulado / cantidadClientes;

                        System.out.println("\n=== RESUMEN FINAL ===");
                        System.out.println("Total de clientes atendidos: " + cantidadClientes);
                        System.out.println("Tiempo total de operación: " + tiempoAcumulado + " minutos.");
                        System.out.printf("Tiempo promedio de atención: %.2f minutos.\n", promedio);

                        // Reiniciamos el contador a 0 para vaciar lógicamente la fila
                        cantidadClientes = 0;
                        System.out.println("(La fila ha quedado vacía nuevamente)");
                    }
                    break;

                case 4:
                    System.out.println("Cerrando el sistema. ¡Hasta pronto!");
                    break;

                default:
                    System.out.println("Opción incorrecta. Por favor ingrese un número del 1 al 4.");
            }
        }

        // Cerramos el Scanner para liberar el recurso
        scanner.close();
    }
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: