Autor Tema: Java ArrayList con iterator. Ejercicio cómo codificar un iterador CU00919C  (Leído 2062 veces)

Pepote21

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 92
    • Ver Perfil
Hola a todos. Os paso mi código del ejercicio CU00919C del curso avanzado de Java realizado en 4 clases.

No estoy muy convencido del mismo, creo que se debe mejorar mucho.

AGRADECER a todos los participantes el poder aprender cada día más.

GRACIAS. Un saludo.

Código: [Seleccionar]

 import java.util.Scanner;

public class EntradaDeTeclado {
    private int entrada;
    Scanner sc;
   
    public EntradaDeTeclado(){
        entrada=0;
        sc=new Scanner(System.in);
    }
   
    public void setEntrada(){
        entrada=sc.nextInt();
    }
   
    public int getEntrada(){
        return entrada;
    }
   
}

Código: [Seleccionar]
public class Animal {
    private String especie;
    private String nombre;
    private double peso;
    private int patas;
   
    public Animal(){}
   
    public Animal(String especie,String nombre,double peso,int patas){
        this.especie=especie;
        this.nombre=nombre;
        this.peso=peso;
        this.patas=patas;
    }

    public String getEspecie() {
        return especie;
    }

    public String getNombre() {
        return nombre;
    }

    public double getPeso() {
        return peso;
    }

    public int getPatas() {
        return patas;
    }
   
    @Override
    public String toString(){
        return "Especie: "+especie+", Nombre: "+nombre+", peso: "+peso+", patas: "+patas+"\n";
    }
}

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

public class ListaDeAnimales {
    ArrayList<Animal> listaAnimales;
   
    public ListaDeAnimales(){
        listaAnimales=new ArrayList<Animal>();   
    }
   
    public void addAnimal(Animal animal){
        listaAnimales.add(animal);
    }
   
    public ArrayList<Animal> getListaAnimales() {
        return listaAnimales;
    }
   
    public int getSize(){
        return listaAnimales.size();
    }
   
    public Iterator<Animal> iterator(){
        return new MiIteratorListaDeAnimales();
    }
   
    @Override
    public String toString(){
        return listaAnimales.toString();
    }
   
   
    protected class MiIteratorListaDeAnimales implements Iterator{
        public int posicion=0;
        public boolean sePuedeEliminar=false;

        @Override
        public boolean hasNext() {
            return posicion<listaAnimales.size();
        }

        @Override
        public Animal next() {
            Animal a=listaAnimales.get(posicion);
            posicion++;
            sePuedeEliminar=true;
            return a;
        }

        @Override
        public void remove() {
            if(sePuedeEliminar){
                listaAnimales.remove(posicion-1);
                posicion--;
                sePuedeEliminar=false;
            }
        }
       
    }
   
}

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


public class Principal {
   
    private static void añadirAnimales(ListaDeAnimales a){
        Animal b=new Animal("cetaceos","ballena",4175.25,0);
        a.addAnimal(b);
        b=new Animal("ovino","obeja",32.25,4);
        a.addAnimal(b);
        a.addAnimal(new Animal("aracnidos","Tarantula",0.080,8));
        a.addAnimal(new Animal ("canes","Pastor Aleman",35,4));
        a.addAnimal(new Animal("vacuno","Toro bravo",550,4));
        a.addAnimal(new Animal("aves","Gallina",1.5,2));
        a.addAnimal(new Animal("primates","Chimpance",10,2));
    }
   
    private static void mostrarLista(ListaDeAnimales a){
        Iterator<Animal> it=a.iterator();
        Animal tmp;
        String text="";
        int i=1;
        System.out.println("Lista de animales: ");
        while (it.hasNext()){
            tmp=it.next();
            text="\nEspecie: "+tmp.getEspecie()+", Nombre: "+tmp.getNombre()+", Peso: "+
                    tmp.getPeso()+", Patas: "+tmp.getPatas()+", número: "+(i++);
            System.out.print(text);
        }
    }
   
    private static void modificarLista(ListaDeAnimales a){
        EntradaDeTeclado e=new EntradaDeTeclado();
        System.out.print("\n¿Qué número desea eliminar de los "+a.getSize()+" que hay?: ");
        e.setEntrada();
        int entrada=e.getEntrada();
        Iterator<Animal> it=a.iterator();
        int i=1;
        Animal tmp;
        while (it.hasNext() ) {
            tmp=it.next();
            if(i==entrada){
                 it.remove();
            }
            i++;
        }
    }
   
    public static void main(String[] args){
       
        ListaDeAnimales lista=new ListaDeAnimales();
       
        añadirAnimales(lista);
        mostrarLista(lista);
        modificarLista(lista);
        mostrarLista(lista);
         
    }
     
}
 
« Última modificación: 10 de Abril 2017, 20:50 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Buenas, las pruebas que he hecho han ido todas bien, y el estilo de programación que he visto no me ha parecido malo. Lo único que me ha extrañado es un warning al compilar, que deberías tratar de eliminar.

Otra cosa que quizás merezca la pena replantear es dónde se ubican los métodos.

Un método como mostrarLista(ListaDeAnimales a) no es lógico tenerlo en un main: es un método propio de una lista de animales, por tanto debería ir en la clase ListaDeAnimales. Este razonamiento se puede hacer extensivo a toda la programación Java: cada clase tiene sus responsabilidades.

Salu2

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".