Supongamos que disponemos de un fichero binario que contiene una secuencia de registros con la siguiente estructura:
- Altura. (float)
- Edad. (int)
- Repetidor. (boolean)
EJERCICIOS:
- Haz una aplicación para generar un fichero con estas características de contenido aleatorio.
- Haz otra que lo lea y calcule la edad media de los alumnos repetidores.
- Y otra más que muestre el contenido del fichero correctamente tabulado para facilitar su legibilidad.
GENERACIÓN DEL FICHERO CON CONTENIDO ALEATORIO
public class Ejercicio2_escribir { public static void main (String [] args) throws IOException { FileOutputStream fos = new FileOutputStream("registro2"); DataOutputStream dos = new DataOutputStream(fos); int numRegistros = (int) (Math.random()*100+1); int i = 0, edad; double aux; float altura; boolean repetidor; while (i < numRegistros) { altura=(float) (Math.random()*2); altura=(int) (altura*100); altura=(float) (altura/100); dos.writeFloat(altura); edad=(int) (Math.random()*100+1); dos.writeInt(edad); aux=Math.random(); if (aux < 0.5) repetidor=true; else repetidor=false; dos.writeBoolean(repetidor); i++; } dos.close(); fos.close(); } }
LEER FICHERO Y CALCULAR EDAD MEDIA DE REPETIDORES
public class Ejercicio2_media { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("registro2"); DataInputStream dis = new DataInputStream(fis); int suma=0, aux, contador = 0; float media; try { while (true) { dis.readFloat(); aux=dis.readInt(); if (dis.readBoolean()) { suma+=aux; contador++; } } } catch (EOFException e) { } fis.close(); dis.close(); if (contador==0) { System.out.println("No hay repetidores."); } else { media = (float) suma/contador; System.out.println("La edad media de los repetidores es: " +media+ " años."); } } }
MOSTRAR EL CONTENIDO DEL FICHERO
public class Ejercicio2_mostrar { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("registro2"); DataInputStream dis = new DataInputStream(fis); System.out.printf("ALTURA\tEDAD\tREPETIDOR"); System.out.println(); try { while (true) { System.out.printf("%.2f\t%2d\t%b", dis.readFloat(), dis.readInt(), dis.readBoolean()); System.out.println(); } } catch (EOFException e) { } fis.close(); dis.close(); } }
No hay comentarios:
Publicar un comentario