viernes, 9 de septiembre de 2011

Ejercicio con figuras

En este ejercicio se utilizan las figuras creadas anteriormente. Se fabricarán varias figuras, que se almacenarán en un fichero utilizando la clase ObjectOutputStream, que nos permite serializar objetos (para ello la clase figura debe implementar Serializable).
Posteriormente se recuperarán las figuras y calcularemos el área media.

public class GuardarFiguras3 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //FABRICAR VARIAS FIGURAS Y GUARDARLAS EN UN FICHERO
        FileOutputStream fos = new FileOutputStream("figuras3");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        LinkedList listado = new LinkedList();
        ListIterator it = listado.listIterator();
        Figura aux;
        float sup=0;
        it.add(new Rectangulo(1, 3, 5, 6));
        sup+=it.previous().area();
        it.next();
        it.add(new Coche(3, 2, 6, 9));
        sup+=it.previous().area();
        it.next();
        it.add(new Circulo(4, 4, 4));
        sup+=it.previous().area();
        it.next();
        it.add(new Rectangulo(1, 3, 5, 5));
        sup+=it.previous().area();
        it.next();
        it.add(new Triangulo(2, 4, 3, 4, 5));
        sup+=it.previous().area();
        sup = sup/5;
        System.out.println("Área media inicial: "+sup);
        ListIterator it2 = listado.listIterator();
        while (it2.hasNext()) {
            oos.writeObject(it2.next());
        }
        oos.close();
        fos.close();
        //RECUPERAR FIGURAS Y CALCULAR LA MEDIA (DEBE COINCIDIR CON LA INICIAL)
        FileInputStream fis = new FileInputStream("figuras3");
        ObjectInputStream ois = new ObjectInputStream(fis);
        float media = 0;
        int contador = 0;
        try {
            while (true) {
                aux = (Figura) ois.readObject();
                media += aux.area();
                contador++;
            }
        } catch (EOFException e) {
        }
        ois.close();
        fis.close();
        media = media / contador;
        System.out.println("Área media final: " + media);
    }
}

No hay comentarios:

Publicar un comentario