Problema 2 · Programació II UDL 2011
Tema: Ficheros en Java: texto secuencial y acceso directo binario · Del examen Examen Segundo Parcial Curso 2011-2012 (2011)
Enunciado
Segundo parcial de Programación 2 (Curso 2011/2012)
A continuación se resumen algunas clases y métodos de la API estándar de Java disponibles para la resolución del examen:
StringTokenizer: constructores new StringTokenizer(String str) y new StringTokenizer(String str, String delims); métodos boolean hasMoreTokens() y String nextToken().
String: charAt(int index), substring(int begin, int end), equals(String other), equalsIgnoreCase(String other), indexOf(String s), indexOf(String s, int begin), toUpperCase(), toLowerCase(), trim().
Double e Integer: métodos de conversión estáticos Double.parseDouble(String s) e Integer.parseInt(String s).
FileReader: constructores y operaciones read(), close().
BufferedReader: new BufferedReader(FileReader reader), String readLine(), void close().
Math: métodos estáticos abs(double val), max(double val1, double val2), min(double val1, double val2).
Problema 2. Procesamiento de fichero y medias de duración por proceso
En el marco de un estudio comparativo orientado a determinar la efectividad de diversos métodos de manufactura (buscando aquellos que logran duraciones operativas más prolongadas), se dispone de un fichero de texto donde cada registro responde a la estructura:
Nº pieza, Proceso, Horas, Minutos
Donde el campo Proceso adopta exclusivamente uno de los cuatro identificadores válidos: A, B, C o D. Se asume que el fichero no contiene errores de sintaxis ni valores anómalos.
Se pide estructurar y desarrollar un programa completo en Java que:
Lea línea por línea el fichero de datos.
Calcule la media de duración (expresada en horas decimales) para cada uno de los cuatro procesos mediante la clase Duration y su método toHours implementados en el Problema 1.
Imprima por pantalla los resultados computados para cada proceso.
Instrucciones adicionales: No se limite a transcribir código fuente; justifique y razone brevemente el planteamiento adoptado. Se valorará positivamente la modularización de la solución mediante métodos o clases auxiliares.

Solución
Según los criterios oficiales de corrección
Problema 2. Procesamiento de fichero y medias de duración por proceso: estructurar y desarrollar un programa completo en Java
Solución: ```java import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.StringTokenizer; public class EstudioProcesos { private static int procesoAIndice(char proceso) { switch (Character.toUpperCase(proceso)) { case 'A': return 0; case 'B': return 1; case 'C': return 2; case 'D': return 3; default: return -1; } } private static char indiceAProceso(int index) { char[] procesos = {'A', 'B', 'C', 'D'}; return procesos[index]; } public static void procesarFichero(String nombreFichero) { double[] sumaHoras = new double[4]; int[] totalPiezas = new int[4]; try (BufferedReader br = new BufferedReader(new FileReader(nombreFichero))) { String linea; while ((linea = br.readLine()) != null) { linea = linea.trim(); if (linea.isEmpty()) continue; StringTokenizer st = new StringTokenizer(linea, ","); if (st.countTokens() >= 4) { String numPieza = st.nextToken().trim(); String procStr = st.nextToken().trim(); int horas = Integer.parseInt(st.nextToken().trim()); int minutos = Integer.parseInt(st.nextToken().trim()); Duration d = new Duration(horas, minutos); int idx = procesoAIndice(procStr.charAt(0)); if (idx >= 0) { sumaHoras[idx] += d.toHours(); totalPiezas[idx]++; } } } } catch (IOException e) { System.err.println("Error al leer el archivo: " + e.getMessage()); return; } mostrarMedias(sumaHoras, totalPiezas); } private static void mostrarMedias(double[] sumaHoras, int[] totalPiezas) { System.out.println("--- Medias de duración por proceso ---"); for (int i = 0; i < 4; i++) { char proc = indiceAProceso(i); if (totalPiezas[i] > 0) { double media = sumaHoras[i] / totalPiezas[i]; System.out.printf("Proceso %c: %.2f horas (muestras: %d)%n", proc, media, totalPiezas[i]); } else { System.out.printf("Proceso %c: Sin datos registrados%n", proc); } } } public static void main(String[] args) { String ruta = (args.length > 0) ? args[0] : "experimento.txt"; procesarFichero(ruta); } } ```
La explicación paso a paso, hecha con IA, es Premium. Premium
Resuélvelo aquí mismo: corrección automática, pistas y solución paso a paso.
‹ Problema 2 · 2012 · Ejercicio Recuperación - Problema 3. Procesamiento de nómin… · 2010 ›