Hola a todos. Dejo aquí mi solución al ejercicio CU00919C del curso gratuito de Java avanzado para que la comentéis y me ayudéis a mejorarla. En ella he implementado una clase EntradaTeclado para pedir la entrada de datos int por teclado y así evitar que el programa se interrumpa al no introduir un valor no entero.
Clase Animal
package cu00919c.ejercicio;
public class Animal {
private String especie, nombre;
private double peso;
private int patas;
public Animal(String especie, String nombre, double peso, int patas){
this.especie=especie;
this.nombre=nombre;
this.peso=peso;
this.patas=patas;
}
public void setEspecie(String e){especie=e;}
public void setNombre(String n) {nombre=n;}
public void setPeso(double p){peso=p;}
public void setPatas(int patas){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+" kg, patas: "+patas;
}
}
Clase ListaDeAnimales
package cu00919c.ejercicio;
import java.util.ArrayList;
import java.util.Iterator;
public class ListaDeAnimales {
private ArrayList<Animal> lista=null;
public ListaDeAnimales(){lista=new ArrayList<Animal>();}
public void addAnimal(Animal a){lista.add(a);}
public ArrayList<Animal> getLista(){return lista;}
public int size(){return lista.size();}
public void remove(int i){lista.remove(i);}
public Iterator<Animal> iterator(){return new Iterador();}
public void imprimir(){
Iterator<Animal> it = lista.iterator();
int numero=1;
while(it.hasNext()){
System.out.print(it.next()+", número "+numero+"\n");
numero++;
}
}
protected class Iterador implements Iterator<Animal>{
public int posicion=0;
public boolean eliminable=false;
@Override
public boolean hasNext(){return posicion<lista.size();}
@Override
public Animal next(){
Animal animal=lista.get(posicion);
posicion++;
eliminable=true;
return animal;
}
@Override
public void remove(){
if(eliminable){
lista.remove(posicion-1);
posicion--;
eliminable=false;
}
}
}
}
Clase EntradaTeclado
package cu00919c.ejercicio;
import java.util.Scanner;
import java.util.InputMismatchException;
public class EntradaTeclado {
Scanner sc;
EntradaTeclado(){}
public int entero(){
sc=new Scanner(System.in);
int numero;
try{numero=sc.nextInt();}
catch(InputMismatchException e){
System.out.print("Entrada no válida. ");
return 0;
}
return numero;
}
}
Clase principal
package cu00919c.ejercicio;
public class CU00919CEjercicio {
public static void main(String[] args) {
int numero=0;
EntradaTeclado entrada=new EntradaTeclado();
ListaDeAnimales lista=new ListaDeAnimales();
lista.addAnimal(new Animal("pantera","Penelope",98.55,4));
lista.addAnimal(new Animal("loro amazónico","Juanito",3.67,2));
lista.addAnimal(new Animal("perro gran danés","Artur",38.77,4));
lista.addAnimal(new Animal("mono de Tanzania","Monk",55.32,2));
System.out.println("Los animales de la lista son:");
lista.imprimir();
do{
System.out.print("\n¿Qué número desea eliminar?: ");
numero=entrada.entero();
if(numero<1||numero>lista.size()){System.out.println("Debe introducir un número entre 1 y "+lista.size());}
}while(numero<1||numero>lista.size());
lista.remove(numero-1);
System.out.println("Los animales de la lista son:");
lista.imprimir();
}
}
Gracias a todos.