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 12 de Febrero 2019, 12:25
-
Hola dejo el ejercicio de java Avanzado CU00919C Interface Iterator api java hasNext remove
Clase Animal
/**
* 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
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
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. ;)
-
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