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.

Enunciado: Problema 2 · Programació II UDL 2011

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 ›

Más ejercicios de Ficheros en Java: texto secuencial y acceso directo binario