Skip to content

Commit 2c5e6fd

Browse files
authored
Comentarios
1 parent e666598 commit 2c5e6fd

File tree

1 file changed

+28
-4
lines changed

1 file changed

+28
-4
lines changed

src/Colmena/Inspeccion.java

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,97 +5,121 @@
55
import static Colmena.Utilidades.runWithBlock;
66

77
public class Inspeccion implements Serializable {
8+
// Atributos de la clase Inspección, guardamos la fecha de la inspección, el resultado y las acciones recomendadas.
89
public Date fecha;
910
public String resultado;
1011
public String acciones;
1112

13+
// Constructor que inicializa la inspección con los valores proporcionados.
1214
public Inspeccion(Date fecha, String resultado, String acciones) {
1315
this.fecha = fecha;
1416
this.resultado = resultado;
1517
this.acciones = acciones;
1618
}
1719

20+
// Método recursivo para generar la información de inspecciones de una lista, con sangría según el nivel de profundidad.
1821
public static String getInfo(List<Inspeccion> inspecciones, int nivel) {
1922
if (inspecciones.isEmpty()) {
20-
return "";
23+
return ""; // Caso base: si no hay más inspecciones, devolvemos una cadena vacía.
2124
}
22-
Inspeccion inspeccion = inspecciones.getFirst();
23-
String result = " ".repeat(nivel * 4) +
25+
26+
// Obtenemos la primera inspección y construimos el resultado formateado.
27+
Inspeccion inspeccion = inspecciones.get(0);
28+
String result = " ".repeat(nivel * 4) + // Añadimos sangría dinámica según el nivel de profundidad.
2429
String.format("📅 Fecha: %s\n", inspeccion.fecha) +
2530
" ".repeat(nivel * 4) +
2631
String.format("🔍 Resultado: %s\n", inspeccion.resultado) +
2732
" ".repeat(nivel * 4) +
2833
String.format("🛠️ Acciones: %s\n", inspeccion.acciones);
2934

35+
// Si hay más inspecciones, agregamos una línea divisoria.
3036
if (inspecciones.size() > 1) {
3137
result += " ".repeat(nivel * 4) + "----------------------------------\n";
3238
}
3339

40+
// Llamada recursiva para las siguientes inspecciones, aumentando el nivel de sangría.
3441
return result + getInfo(inspecciones.subList(1, inspecciones.size()), nivel + 1);
3542
}
3643

44+
// Método para realizar inspecciones en una lista de colmenas, con concurrencia y manejo de hilos.
3745
public static void realizarInspecciones(List<Colmena> colmenas) {
46+
// Si no hay colmenas, informamos al usuario y terminamos el proceso.
3847
if (colmenas.isEmpty()) {
3948
runWithBlock(() -> Utilidades.printWithDelay("⚠️ No hay colmenas registradas para inspeccionar.\n", 50));
4049
return;
4150
}
4251

52+
// Listas para almacenar los hilos de ejecución y los mensajes de resultado de cada inspección.
4353
List<Thread> hilos = new ArrayList<>();
4454
List<String> mensajesResultado = Collections.synchronizedList(new ArrayList<>());
4555

56+
// Iteramos sobre cada colmena para crear un hilo que realice la inspección.
4657
for (Colmena colmena : colmenas) {
4758
Thread hilo = new Thread(() -> {
4859
try {
60+
// Mostramos un mensaje de inicio de la inspección para cada colmena.
4961
runWithBlock(() -> Utilidades.printWithDelay("🕵️ Inspeccionando la colmena " + colmena.id + "...", 50));
5062

63+
// Simulamos el tiempo de inspección con un retraso aleatorio entre 500ms y 1500ms.
5164
Random random = new Random();
5265
int tiempoInspeccion = random.nextInt(1000) + 500;
5366
Thread.sleep(tiempoInspeccion);
5467

68+
// Cálculo de puntos para determinar el estado de la colmena, basado en su abeja reina y el estado general.
5569
int estadoPuntos = (colmena.abejaReina != null && colmena.abejaReina.estadoSalud.equals("Buena")) ? 2 : 0;
5670
estadoPuntos += switch (colmena.estadoSalud) {
5771
case "Buena" -> 2;
5872
case "Regular" -> 1;
5973
default -> 0;
6074
};
6175

76+
// Evaluamos el estado de la colmena en función de los puntos obtenidos.
6277
String resultado = estadoPuntos >= 3 ? "Estado óptimo" :
6378
estadoPuntos == 2 ? "Necesita monitoreo" : "Urgente atención";
6479

80+
// Definimos las acciones a tomar dependiendo del resultado de la inspección.
6581
String acciones = switch (resultado) {
6682
case "Estado óptimo" -> "Revisión en 6 meses";
6783
case "Necesita monitoreo" -> "Revisar en 3 meses";
6884
default -> "Reparaciones urgentes y suplementar alimentación";
6985
};
7086

87+
// Creamos un objeto Inspección con la fecha actual y los resultados.
7188
Inspeccion inspeccion = new Inspeccion(new Date(), resultado, acciones);
7289
colmena.agregarInspeccion(inspeccion);
7390

91+
// Determinamos el mensaje final según el resultado de la inspección.
7492
String mensajeFin = resultado.equals("Estado óptimo")
7593
? "\r✅ Inspección completada con éxito para la colmena " + colmena.id + "."
7694
: "\r⚠️ La inspección terminó con algunos problemas para la colmena " + colmena.id + ".";
7795

96+
// Añadimos el mensaje a la lista de resultados.
7897
mensajesResultado.add("\n" + mensajeFin);
7998
} catch (InterruptedException e) {
99+
// En caso de error durante la inspección, mostramos un mensaje de error.
80100
runWithBlock(() -> Utilidades.printWithDelay("\r⚠️ Error durante la inspección de la colmena " + colmena.id + ".\n", 50));
81101
}
82102
});
83103

104+
// Añadimos el hilo a la lista y lo iniciamos.
84105
hilos.add(hilo);
85106
hilo.start();
86107
}
87108

109+
// Esperamos a que todos los hilos terminen antes de continuar.
88110
for (Thread hilo : hilos) {
89111
try {
90112
hilo.join();
91113
} catch (InterruptedException e) {
114+
// En caso de error al esperar la finalización de un hilo, mostramos un mensaje.
92115
runWithBlock(() -> Utilidades.printWithDelay("\r⚠️ Error esperando la finalización de un hilo.\n", 50));
93116
}
94117
}
95118

119+
// Después de que todas las inspecciones han terminado, mostramos los resultados.
96120
runWithBlock(() -> {
97121
mensajesResultado.forEach(mensaje -> Utilidades.printWithDelay(mensaje, 50));
98-
animacionAbejas();
122+
animacionAbejas(); // Animación de abejas al finalizar las inspecciones.
99123
});
100124
}
101125
}

0 commit comments

Comments
 (0)