Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Luis Fdo Carvajal en 24 de Mayo 2017, 19:56

Título: ArrayList de miles de objetos aleatorios recorrer con iterator en BlueJ CU00920C
Publicado por: Luis Fdo Carvajal en 24 de Mayo 2017, 19:56
Buenos días. Ejercicio CU00920C del tutorial de programación Java avanzado.

El código, Saludos
Código: [Seleccionar]
package cuadrupedo;

/**
 *
 * @author itco1724
 */
public class Cuadrupedo {

    private String especie;
    private int ID;
   
   
   
 public Cuadrupedo (int ID, String especie){
   
    this.especie = especie;
    this.ID = ID;
    }   
   
  @Override
    public String toString() {
         return " CUADRUPEDO -->: ID" + ID + " " + "Tipo: "+ especie;}
   
     public String getEspecie() {return especie;}
     public int getID() {return ID;}
   
}//Cierre de la clase

Código: [Seleccionar]
package cuadrupedo;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;

/**
 *
 * @author itco1724
 */
public class TestCuadrupedo {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       
        List<Cuadrupedo> cp = new ArrayList<Cuadrupedo>();
        String[] Cuadrupedos = {"Elefante", "Perro", "Gato", "Leon"};

            Random r = new Random();
            Cuadrupedo temp = null;
            String tipoCuadrupedo;
            int numeroLeones = 0;
            int numeroGatos = 0;
            int numeroPerros = 0;
            int numeroElefantes = 0;


     for(int i=0;i<10001;i++) {       
//generar enteros al azar entre dos límites DESDE , HASTA, ambos incluidos:
         
         cp.add(new Cuadrupedo(i,Cuadrupedos[r.nextInt((0)+4)]));}
     
            Iterator<Cuadrupedo> it = cp.iterator();

     while(it.hasNext()){

            temp = it.next();
            //System.out.println(temp);
            tipoCuadrupedo = temp.getEspecie();
           
            switch (tipoCuadrupedo){
                 case "Elefante":
                    numeroElefantes ++;
                    break;
                 case"Perro":
                    numeroPerros ++;
                    break;
                 case "Gato":
                    numeroGatos ++;
                    break;
                 case "Leon":
                    numeroLeones++;
                    break;
            }
           
            //SeleccioN animales con id múltiplo de 1000
            if (temp.getID()%1000 == 0 ){
            System.out.println(temp);}
            }

            System.out.println("Hay " + numeroLeones + " Leones,"+numeroGatos + " Gatos," + numeroPerros + " Perros y " + numeroElefantes + " Elefantes");
      }

}

Título: Re:ArrayList de miles de objetos aleatorios recorrer con iterator en BlueJ CU00920C
Publicado por: Alex Rodríguez en 21 de Junio 2017, 18:09
Hola Luis Fdo Carvajal

Por favor, si creas temas en el foro, ponle un título adecuado siguiendo las indicaciones que se dan en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

El enunciado pedía generar 10000 objetos de tipo Cuadrupedo

Con el bucle for(int i=0;i<10001;i++)  estás generando 10001 objetos. Debes tener claro el manejo de bucles e índices. El índice 0 constituye el primer elemento. Luego has definido ir del 1 al 10000. Total tienes 1 + 10000 = 10001 objetos, que no es exactamente lo que pedía el ejercicio.

Una ejecución de tu código da por ejemplo

 CUADRUPEDO -->: ID0 Tipo: Gato
 CUADRUPEDO -->: ID1000 Tipo: Perro
 CUADRUPEDO -->: ID2000 Tipo: Elefante
 CUADRUPEDO -->: ID3000 Tipo: Leon
 CUADRUPEDO -->: ID4000 Tipo: Elefante
 CUADRUPEDO -->: ID5000 Tipo: Gato
 CUADRUPEDO -->: ID6000 Tipo: Leon
 CUADRUPEDO -->: ID7000 Tipo: Gato
 CUADRUPEDO -->: ID8000 Tipo: Elefante
 CUADRUPEDO -->: ID9000 Tipo: Elefante
 CUADRUPEDO -->: ID10000 Tipo: Leon
Hay 2568 Leones,2497 Gatos,2454 Perros y 2482 Elefantes


Sumamos
2568
2497
2454
2482
--------------
10001

La expresión r.nextInt((0)+4) no parece adecuada, ya que r.nextInt(4) es lo mismo pero más claro.

Lo demás todo bien

Saludos