Buenas noches, aquí va mi respuesta al ejercicio.
Comentar que hice 3 clases, una EntradaDatos otra ListaCantantesFamosos y el main GestorLista.
En el main pido numero de introducciones de cantantes, para no limitarlo a dos, controlo la excepción numerica en un metodo de EntradaDatos.
Hace todo lo que pide el ejercicio por lo demás.
Por cierto Toni, recordé tu comentario sobre que podiamos utilizar el mismo objeto Scanner tantas veces como hiciera falta, pues al recoger datos del mismo, queda de nuevo "vacio". Gracias muy útil lo que comentas como siempre.
Clase ListaCantantesFamosos
import java.util.ArrayList;
public class ListaCantantesFamosos{
//Atributos clase, un nombre de la lista (podria ser POP, ROCK o General) y un array con los cantantes
private String nombreTabla = "";
private ArrayList<String> tablaFamosos;
//Constructor
public ListaCantantesFamosos(String valorNombreTabla){
nombreTabla = valorNombreTabla;
tablaFamosos = new ArrayList<String>();
añadirNombre("Julio Iglesias"); añadirNombre("David Bisbal"); añadirNombre("Chenoa");
}
//Añadir nombre
public void añadirNombre(String nombre){
tablaFamosos.add(nombre);}
//Extraer nombres
public String recuperarNombre(int indice){ return tablaFamosos.get(indice); }
//Imprimir la lista tablaFamosos
public void imprimirLista(){
for(int x = 0;x < tablaFamosos.size(); x++){
System.out.println("Famoso "+ nombreTabla+ " " + (x+1) + ": " + recuperarNombre(x));
}
}
} //cierre clase
Clase EntradaDatos
import java.util.Scanner;
import java.util.InputMismatchException;
public class EntradaDatos {
public EntradaDatos(){ /*vacío*/ }
public String recogerString(){
String nombre1;
Scanner escaner = new Scanner(System.in);
nombre1 = escaner.nextLine();
return nombre1;
} //final metodo recogerString
public int recogerEntero(){
int numero = 0; boolean semaforo = false;
while(semaforo == false){
semaforo = true; //pongo semaforo a true para que salga del while a no ser que entre en Excepcion
try {
Scanner escaner = new Scanner(System.in);
numero = escaner.nextInt();
} //final try
catch (InputMismatchException ex)
{
System.out.println(" Has introducido un dato erroneo, introduce un número porfavor ");
semaforo = false;
} //final catch
} //final while
return numero;
} //final método recogerEntero
} //final clase
Clase GestorLista
public class GestorLista{
public static void main(String[] args){
int cantidadAñadir;
EntradaDatos entrada1 = new EntradaDatos(); //inicializo entrada de datos
System.out.println("De que tipo de música quieres crear la nueva lista?");
//Inicializamos la nueva lista de cantantes con el nombre de la clase de música indicado
ListaCantantesFamosos lista1 = new ListaCantantesFamosos(entrada1.recogerString());
System.out.println("Indica el número de cantantes nuevos que quieres añadir");
cantidadAñadir = entrada1.recogerEntero();
for(int x=0; x < cantidadAñadir; x++){
System.out.println("Introduce el nombre de un cantante");
lista1.añadirNombre(entrada1.recogerString() );
} //final for
lista1.imprimirLista();
} //final main
} //final clase