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: paramonso en 07 de Enero 2019, 09:18

Título: Java dar formato tabular salida de datos por pantalla en columnas tabla CU00915C
Publicado por: paramonso en 07 de Enero 2019, 09:18
Hola dejo el ejercicio CU00915C del curso avanzado de programación Java de aprenderaprogramar. Interface Iterable y método Iterator (API Java). Recorrer colecciones. Ejercicio y ejemplo resuelto

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]
public class AvesEnZoo  { 
    public String tipoDeAve;
    public int numeroAves, numeroMachos, numeroHembras;
    public AvesEnZoo(String tAve,int nAves, int nMachos, int nHembras)
    {
        this.tipoDeAve= tAve; 
        this.numeroAves =nAves ;
        this.numeroMachos=nMachos;
        this.numeroHembras=nHembras;
    }

}

Clase GruposDeAvesZoo
Código: [Seleccionar]
import java.util.Iterator;

/* Ejemplo interface Iterable aprenderaprogramar.com */

public class  GruposDeAvesZoo implements Iterable<AvesEnZoo>{

    public AvesEnZoo[] gruposDeAvesZoo; // Atributo de la clase

    public GruposDeAvesZoo (AvesEnZoo [] aves) {
        // Constructor de la clase
        gruposDeAvesZoo = aves; 
    }

    public Iterator<AvesEnZoo> iterator() {
        Iterator it = new MiIteratorAves();
        return it;         
    }


    protected class MiIteratorAves implements Iterator<AvesEnZoo>   {
        protected int posicionarray;
        public MiIteratorAves()   {
            posicionarray = 0;
        }
        public boolean hasNext() {
            boolean result;
            if (posicionarray < gruposDeAvesZoo.length) { result = true; }
            else { result = false; }
            return result;
        }
        public AvesEnZoo next() {
           posicionarray++;
            return gruposDeAvesZoo[posicionarray-1];
        }

        public void remove(){
            throw new UnsupportedOperationException("No soportado.");
        }

    }

}

Modulo de la clase TestIterator
Código: [Seleccionar]
import java.util.Iterator;
public class TestsIterator {
    public static void main(String arg[]) {
        AvesEnZoo ave1 = new AvesEnZoo("Avestruz",15,5,10);
        AvesEnZoo ave2 = new AvesEnZoo("Aguila  ",5,3,2);
        AvesEnZoo ave3 = new AvesEnZoo("Pato    ",55,35,20);
        AvesEnZoo ave4=  new AvesEnZoo("Alcon   ",10,3,7);
        AvesEnZoo[] aves = {ave1,ave2,ave3,ave4};
        GruposDeAvesZoo grupoAves = new GruposDeAvesZoo(aves);
         
        System.out.println("|TIPO     |TOTAL|MACHOS|HEMBRAS|");
        System.out.println("|---------|-----|------|-------|");
        for (AvesEnZoo ab : grupoAves) // Esto es un for extendido o for-each
        {
             
            System.out.printf("|%s |%5d|%6d|%7d|\n",ab.tipoDeAve,ab.numeroAves,ab.numeroMachos,ab.numeroHembras);
            System.out.println("|---------|-----|------|-------|");
        }
         
      }
}
Gracias. ;)
Título: Re:Java dar formato tabular salida de datos por pantalla en columnas tabla CU00915C
Publicado por: Ogramar en 09 de Octubre 2019, 20:56
Buenas, para quien revise este ejercicio, está bien resuelto. Además, en la clase test tiene un ejemplo de cómo generar una salida formateada en columnas por pantalla. En concreto un fragmento que será interesante para quien esté buscando un ejemplo sobre cómo hacer esto:

Código: [Seleccionar]
        System.out.println("|TIPO     |TOTAL|MACHOS|HEMBRAS|");
        System.out.println("|---------|-----|------|-------|");
        for (AvesEnZoo ab : grupoAves) // Esto es un for extendido o for-each
        {
             
            System.out.printf("|%s |%5d|%6d|%7d|\n",ab.tipoDeAve,ab.numeroAves,ab.numeroMachos,ab.numeroHembras);
            System.out.println("|---------|-----|------|-------|");
        }

Salu2