Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Erik_Escriche en 28 de Diciembre 2016, 17:26

Título: Java Interface Iterable método Iterator Recorrer colecciones Ejercicio CU00915C
Publicado por: Erik_Escriche en 28 de Diciembre 2016, 17:26
Buenas.

Esta es mi solución al ejercicio de la entrega CU00915C del curso Lenguaje de Programación Java Nivel Avanzado I.

Citar
Crea una clase denominada AvesEnZoo con 4 atributos. Uno será de tipo String (tipoDeAve) y los otros tres serán de tipo int (numeroAves, numeroMachos, numeroHembras).

Crea una clase GruposDeAvesZoos que implemente la interface Iterable. Crea varios objetos de tipo AvesEnZoo y añádelos a un objeto GruposDeAvesEnZoos.

Utilizando un iterador, muestra los datos de los objetos presentes en el objeto GruposDeAvesZoos.

Clase AvesEnZoo.
Código: [Seleccionar]
package javaAvanzado;
public class AvesEnZoo {
    //Atributos de clase.
    private String tipoDeAve;
    private int numeroAves;
    private int numeroHembras;
    private int numeroMachos;
    //Constructor.
    public AvesEnZoo (String tipo, int total, int machos, int hembras) {
        tipoDeAve=tipo;
        numeroAves=total;
        numeroHembras=hembras;
        numeroMachos=machos;
    }
    //Métodos.
    public String getTipoDeAve () {return tipoDeAve;}
    public int getNumeroAves () {return numeroAves;}
    public int getNumeroHembras () {return numeroHembras;}
    public int getNumeroMachos () {return numeroMachos;}
    @Override
    public String toString() {
        String result;
        return result= tipoDeAve+"   "+numeroAves+"    "+numeroMachos+"   "+numeroHembras+"   ";
    }
}


Clase GrupoDeAvesZoo.
Código: [Seleccionar]
package javaAvanzado;
import java.util.Iterator;
public class GrupoDeAvesZoo implements Iterable <AvesEnZoo> {
    //Atributo de la clase.
    public AvesEnZoo[] grupoDeAvesZoo;
    //Constructor.
    public GrupoDeAvesZoo (AvesEnZoo[] grupoDeAvesZoo) {
        this.grupoDeAvesZoo=grupoDeAvesZoo;
    }
    //Método.
    public Iterator<AvesEnZoo> iterator() {
        Iterator <AvesEnZoo> it = new MiIteradorGrupoDeAvesZoo();
        return it;
    }
    //Clase interna.
    protected class MiIteradorGrupoDeAvesZoo implements Iterator <AvesEnZoo> {
        //Atributo de la clase.
        protected int posicion;
        //Constructor.
        public MiIteradorGrupoDeAvesZoo() {
            posicion=0;
        }
        //Métodos.
        public boolean hasNext() {
            boolean result;
            if (posicion<grupoDeAvesZoo.length) {result=true;}
            else {result=false;}
            return result;
        }
        public AvesEnZoo next() {
            AvesEnZoo ave = grupoDeAvesZoo[posicion];
            posicion++;
            return ave;
        }
        public void remove() {
            throw new UnsupportedOperationException ("No soportado.");
        }
    }
}

Clase con el método main.
Código: [Seleccionar]
package javaAvanzado;
import java.util.Iterator;
public class MainGrupoDeAvesZoo {
    public static void main (String [] args) {
        AvesEnZoo aves1 = new AvesEnZoo ("Águilas ", 35, 10, 25);
        AvesEnZoo aves2 = new AvesEnZoo ("Buitres", 100, 55, 45);
        AvesEnZoo aves3 = new AvesEnZoo ("Halcones", 80, 25, 55);
        AvesEnZoo [] avesEnZoo = {aves1, aves2, aves3};
        GrupoDeAvesZoo grupoDeAvesZoo = new GrupoDeAvesZoo (avesEnZoo);
        Iterator<AvesEnZoo> it = grupoDeAvesZoo.iterator();
        System.out.println ("TIPO   TOTAL|MACHOS|HEMBRAS");
        while (it.hasNext()) {
            AvesEnZoo tmp = it.next();
            System.out.println (tmp.toString());
        }
    }
}   

¡Saludos!
Título: Re:Ejercicio de la entrega CU00915C Java Nivel Avanzado I
Publicado por: ESOJ en 30 de Diciembre 2016, 06:54
Buenos días.

El ejercicio es correcto.

Podrías simplificar un poco la clase main de la siguiente forma:
Código: [Seleccionar]
import java.util.Iterator;
public class MainGrupoDeAvesZoo {
    public static void main (String [] args) {
        AvesEnZoo aves1 = new AvesEnZoo ("Águilas ", 35, 10, 25);
        AvesEnZoo aves2 = new AvesEnZoo ("Buitres", 100, 55, 45);
        AvesEnZoo aves3 = new AvesEnZoo ("Halcones", 80, 25, 55);
        AvesEnZoo [] avesEnZoo = {aves1, aves2, aves3};
        GrupoDeAvesZoo grupoDeAvesZoo = new GrupoDeAvesZoo (avesEnZoo);       
        System.out.println ("TIPO   TOTAL|MACHOS|HEMBRAS");       
        for (AvesEnZoo p: avesEnZoo){
            System.out.println (p.toString());
        }
    }
}   

y el método next() de la clase MiIteradorGrupoDeAvesZoo podría ser:
Código: [Seleccionar]
public AvesEnZoo next() {         
            posicion++;
            return grupoDeAvesZoo[posicion-1];
        }

Un saludo
Título: Re:Ejercicio de la entrega CU00915C Java Nivel Avanzado I
Publicado por: Erik_Escriche en 30 de Diciembre 2016, 20:04
Agradezco tu comentario, ESOJ. Me parecen buenas simplificaciones.

¡Un saludo!