miércoles, 7 de septiembre de 2011

Creación de fichero con datos aleatorios

Supongamos que disponemos de un fichero binario que contiene una secuencia de registros con la siguiente estructura:
  1. Altura. (float)
  2. Edad. (int)
  3. 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