From 0de0c5dfcca0510aea09762dce96d19efe0c894c Mon Sep 17 00:00:00 2001 From: pareyor Date: Wed, 29 May 2024 21:43:52 +0200 Subject: [PATCH] reto 4 CCCF completado --- reto4/Caja.java | 39 +++++++++++++++++++++ reto4/Main.java | 6 ++++ reto4/Tienda.java | 88 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 133 insertions(+) create mode 100644 reto4/Caja.java create mode 100644 reto4/Main.java create mode 100644 reto4/Tienda.java diff --git a/reto4/Caja.java b/reto4/Caja.java new file mode 100644 index 0000000..7bd9309 --- /dev/null +++ b/reto4/Caja.java @@ -0,0 +1,39 @@ +class Caja { + private int clientesProcesados; + private int itemsRestantes; + private boolean libre; + + public Caja() { + this.clientesProcesados = 0; + this.itemsRestantes = 0; + this.libre = true; + } + + public boolean isLibre() { + return libre; + } + + public void ocuparCaja(int items) { + this.clientesProcesados++; + this.itemsRestantes = items; + this.libre = false; + } + + public void procesarItem() { + if (itemsRestantes > 0) { + itemsRestantes--; + if (itemsRestantes == 0) { + libre = true; + } + } + } + + public int getClientesProcesados() { + return clientesProcesados; + } + + public int getItemsRestantes() { + return itemsRestantes; + } +} + diff --git a/reto4/Main.java b/reto4/Main.java new file mode 100644 index 0000000..0a85022 --- /dev/null +++ b/reto4/Main.java @@ -0,0 +1,6 @@ +public class Main { + public static void main(String[] args) { + Tienda tienda=new Tienda(); + tienda.simularDia(); + } +} diff --git a/reto4/Tienda.java b/reto4/Tienda.java new file mode 100644 index 0000000..b8285cf --- /dev/null +++ b/reto4/Tienda.java @@ -0,0 +1,88 @@ +import java.util.Random; + +public class Tienda { + private static final int MINUTOS_EN_UN_DIA = 12 * 60; + private static final int PROBABILIDAD_LLEGADA = 40; + private Caja[] cajas; + private int cola; + private int minutosSinCola; + private int totalItems; + private boolean activa; + private Random random; + + public Tienda() { + this.cajas = new Caja[5]; + for (int i = 0; i < cajas.length; i++) { + cajas[i] = new Caja(); + } + this.cola = 0; + this.minutosSinCola = 0; + this.totalItems = 0; + this.activa = false; + this.random = new Random(); + } + + public void simularDia() { + for (int tiempo = 1; tiempo < MINUTOS_EN_UN_DIA; tiempo++) { + if (random.nextInt(100) < PROBABILIDAD_LLEGADA) { // 40% de probabilidad de que llegue un nuevo cliente + cola++; // cada nuevo cliente va a la cola + asignarClienteACaja(); + } + + procesarItemsEnCajas(); + + if (cola == 0) { + minutosSinCola++; + } + + imprimirEstado(tiempo); + verificarActivacionCajaExtra(); + } + imprimirResumen(); + } + + private void asignarClienteACaja() { + for (int i = 0; i < cajas.length; i++) { + if (cajas[i].isLibre() && (i < 4 || activa)) { + int items = random.nextInt(11) + 5; + cajas[i].ocuparCaja(items); + totalItems += items; + cola--; + break; + } + } + } + + private void procesarItemsEnCajas() { + for (Caja caja : cajas) { + caja.procesarItem(); + } + } + + private void imprimirEstado(int tiempo) { + System.out.println("--------------------------------------------------------------"); + System.out.print("MINUTO " + tiempo + " - En cola: " + cola); + for (int i = 0; i < cajas.length; i++) { + System.out.print(" | Caja" + (i + 1) + ":[" + cajas[i].getItemsRestantes() + "]"); + } + System.out.println(); + } + + private void verificarActivacionCajaExtra() { + activa = cola >= 15; + } + + private void imprimirResumen() { + for (int i = 0; i < cajas.length; i++) { + System.out.println("Clientes totales que pasan por la caja " + (i + 1) + " : " + cajas[i].getClientesProcesados()); + } + int totalClientes = 0; + for (Caja caja : cajas) { + totalClientes += caja.getClientesProcesados(); + } + System.out.println("Personas que han pasado por la tienda: " + totalClientes); + System.out.println("Hoy se han vendido " + totalItems + " productos"); + System.out.println("La cola ha estado vacía durante " + minutosSinCola + " minutos"); + System.out.println("Quedan " + cola + " clientes al finalizar el día en la cola."); + } +}