Autor Tema: Java Avanzado Ejercicio CU00919C Interface Iterator api java hasNext remove  (Leído 599 veces)

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Hola dejo el ejercicio de java Avanzado CU00919C Interface Iterator api java hasNext remove 

Clase Animal
Código: [Seleccionar]
/**
 * Write a description of class a here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class Animal
{
    // instance variables - replace the example below with your own
     private String especie;
     private String nombre;
     private double peso;
     private int patas;
    //Constructores
   
   
    public Animal(String especie, String nombre,double peso, int patas)
    {
    this.especie=especie;
    this.nombre=nombre;
    this.peso=peso;
    this.patas=patas;
    }
   
    //metodos get y set
    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 "Animal ==>: especie "+especie+" Nombre: "+nombre+" Peso: "+peso+" Patas: "+patas+"\n";
    }
}//Fin de la clase

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

public class ListaDeAnimales {
    public ArrayList<Animal> listaAnimales = null;  // Campo de la clase
    public ListaDeAnimales() {listaAnimales= new ArrayList<Animal>();}  // Constructor de la clase
    public ArrayList<Animal> getListaDeAnimales(){return listaAnimales;} //Omitimos otros métodos
    public Iterator<Animal> iterator() {return new MiIteradorListaAnimales();} // Método de la clase

    @Override
    public String toString() {return listaAnimales.toString();}  // Método de la clase

    protected class MiIteradorListaAnimales implements Iterator<Animal>  // Clase interna
    {
        public int posicion = 0;    public boolean sepuedeeliminar = false;  // Campos
       
        @Override
        public boolean hasNext() {return posicion < listaAnimales.size();}  // Método
       
        @Override
        public Animal next() {  // Método
           Animal res = listaAnimales.get(posicion); // Creamos un objeto Animal igual al que recorremos
            posicion ++;
            sepuedeeliminar = true;
            return res;}
       
        @Override
        public void remove() {
            if (sepuedeeliminar) {
                listaAnimales.remove(posicion-1);
                posicion--;
                sepuedeeliminar = false; }
        } // Cierre del método remove
    } // Cierre de la clase interna
}  // Cierre de la clase

Clase Programa
Código: [Seleccionar]
import java.util.Iterator;
import java.util.Scanner;
public class Programa {
   
    public static void main(String arg[]) {
        ListaDeAnimales la = new ListaDeAnimales();
        iniciarLista(la);
        presentarLista(la);
        numeroAnimalEliminar(la);
       }

    public static void iniciarLista(ListaDeAnimales la){
        la.getListaDeAnimales().add(new Animal("Pantera         ","Penelope",98.55,4));
        la.getListaDeAnimales().add(new Animal("Loro Amazonico  ","Juanito ",3.67,2));
        la.getListaDeAnimales().add(new Animal("Perro Gran Danes","Artur   ",38.77,4));
        la.getListaDeAnimales().add(new Animal("Mono de Tanzania","Monk    ",55.32,4));
    }

    public static void presentarLista(ListaDeAnimales la){
        Iterator<Animal> it;
        Animal e; // Este objeto lo usaremos para almacenar temporalmente objetos Animal
         System.out.println("Los animales en la lista son: " );
        System.out.print("Numero Especie            Nombre  \tPeso  Patas\n");
        it = la.iterator();
        int i=1;
        while (it.hasNext() ) {
            e = it.next();
            System.out.print( "  " +(i++)+"\t"+
                            e.getEspecie()+"  "+
                            e.getNombre()+"\t"+
                            e.getPeso()+"\t"+
                            e.getPatas()+"\n");

        }
    }
    public static void numeroAnimalEliminar(ListaDeAnimales la){
    Scanner x = new Scanner (System.in);    //Creación de un objeto Scanner
        String scTeclado;
        //Convertir cadena a numero entero
        int numEliminar=0;
        while(numEliminar<1 || numEliminar>4){
            System.out.print("Introduzca el numero de Animal a eliminar: ");
            scTeclado = x.nextLine ();
            numEliminar= Integer.parseInt(scTeclado);
            if(numEliminar<1 || numEliminar>4)
            {
                System.out.print(scTeclado+" Numero Erroneo ¡¡¡¡\n");
            }
            else{
               int i=1;
                Iterator<Animal> it2;
                 
                it2=la.iterator();
                while (it2.hasNext() ) {
                    Animal tmp=it2.next();
                    if (i==numEliminar) {
                         System.out.print( "\nAnimal a eliminar, Especie: "+
                            tmp.getEspecie()+", Nombre:  "+
                            tmp.getNombre()+", Peso: "+
                           tmp.getPeso()+", Nº Patas: "+
                            tmp.getPatas()+"\n\n");
                        it2.remove();
                    }
                    i++;
                }
            }   
        }
         presentarLista(la);
    }
}

Adios. ;)

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2553
    • Ver Perfil
Buenas, para quien revise este ejercicio hay algún detalle que creo mejorable. En la clase Programa aparece esta línea:

while(numEliminar<1 || numEliminar>4)

Aquí el número 4 hace referencia al número de animales en la lista, que se supone es 4. Pero ¿qué ocurre si hay otro número de animales en la lista? Que el código ya no funcionaría correctamente. Por ello, es preferible evitar programar indicando un número explícito como 4 y en su lugar usar el método size() que nos da una solución más general.

Esto puede verse en este otro hilo que recomiendo consultar: https://aprenderaprogramar.com/foros/index.php?topic=6875.0

Salu2

 

Esto es un laboratorio de ideas...
Aprender a programar

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".