Hola. Aquí dejo mi solución al ejercicio CU00915C del tutorial gratuito de programación de java avanzado disponible en esta web.
Clase Principal
package cu00915c.ejercicio;
import java.util.Iterator;
public class CU00915CEjercicio {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
AvesEnZoo Aguilas=new AvesEnZoo("Aguilas",35,10,25);
AvesEnZoo Buitres=new AvesEnZoo("Buitres",100,55,45);
AvesEnZoo Halcones=new AvesEnZoo("Halcones",80,25,55);
AvesEnZoo[] aves ={Aguilas,Buitres,Halcones};
GruposDeAvesZoos grupo=new GruposDeAvesZoos(aves);
Iterator<AvesEnZoo> it=grupo.iterator();
System.out.println("TIPO\t\t|TOTAL\t|MACHOS\t|HEMBRAS|");
while(it.hasNext()){
AvesEnZoo tmp=it.next();
System.out.println(tmp.getTipoDeAve()+" \t "+tmp.getnumeroAves()+"\t "+tmp.getnumeroMachos()+"\t "+tmp.getnumeroHembras());
}
}
}
Clase AvesEnZoo
package cu00915c.ejercicio;
public class AvesEnZoo {
private String tipoDeAve;
private int numeroAves, numeroMachos, numeroHembras;
//Constructores
public AvesEnZoo(){};
public AvesEnZoo(String tipoDeAve){
this.tipoDeAve=tipoDeAve;
this.numeroAves=0;
this.numeroMachos=0;
this.numeroHembras=0;
}
public AvesEnZoo(String tipoDeAve, int numeroAves, int numeroMachos, int numeroHembras){
this.tipoDeAve=tipoDeAve;
this.numeroAves=numeroAves;
this.numeroMachos=numeroMachos;
this.numeroHembras=numeroHembras;
if(!datosConsistentes()){System.out.println("Error: Datos inconsistentes");}
}
//Métodos
public void setTipoDeAve(String tipo){tipoDeAve=tipo;}
public void setNumeroAves(int numero){numeroAves=numero;}
public void setNumeroMachos(int numero){numeroMachos=numero;}
public void setNumeroHembras(int numero){numeroHembras=numero;}
public String getTipoDeAve(){return tipoDeAve;}
public int getnumeroAves(){return numeroAves;}
public int getnumeroMachos(){return numeroMachos;}
public int getnumeroHembras(){return numeroHembras;}
public boolean datosConsistentes(){
if (numeroAves!=(numeroMachos+numeroHembras)){return false;}
else{return true;}
}
@Override
public String toString(){return tipoDeAve+"\tTotal: "+numeroAves+"\tMachos: "+numeroMachos+"\tHembras: "+numeroHembras;}
}
Clase GruposDeAvesZoos
package cu00915c.ejercicio;
import java.util.Iterator;
public class GruposDeAvesZoos implements Iterable{
private AvesEnZoo[] gruposDeAves;
public GruposDeAvesZoos(){}
public GruposDeAvesZoos(AvesEnZoo[] grupo){
this.gruposDeAves = grupo;
}
@Override
public Iterator<AvesEnZoo> iterator(){
Iterator it=new IteratorAvesEnZoo();
return it;
}
//Clase interna que implementa Iterator
protected class IteratorAvesEnZoo implements Iterator<AvesEnZoo>{
protected int posicion;
//Constructor
IteratorAvesEnZoo(){posicion=0;}
@Override
public boolean hasNext(){
if (posicion<gruposDeAves.length){return true;}else{return false;}
}
@Override
public AvesEnZoo next(){
posicion++;
return gruposDeAves[posicion-1];
}
@Override
public void remove(){
gruposDeAves[posicion]=null;
posicion--;
}
}
}
En el constructor de la clase AvesEnZoo he incluido una omprobación de la congruencia de los datos numéricos, con objeto de implementarla mejor en caso de tener que usarla en un programa que pida los datos por teclado.
Además, hay un método toString() para imprimir los datos de cada objeto independiente.
En la clase GrupoDeAvesZoos he intentado implementar el método remove(), pero no sé cómo funciona. No he conseguido resultados satisfactorios.