Hola Dan
En tu ejercicio cumples las peticiones del enunciado gestionando la lista de cantantes famosos. Bien.
Dan, voy a comentar detalles de tu código para que puedan mejorar si cabe.
Tu clase Lector, es sencilla y operativa al 100%, no tiene ningún defecto. Es posible que hayas oido hablar de las convenciones a la hora de bautizar los métodos en Java.
Siguiendo esa convención tu método:
LeerCadena()
debería llamarse:
leerCadena()
----
En tu clase ListaCantantesFamosos la siguiente instrucción:
cantantes = new <String> ArrayList(2);
provoca un warning, que se elimina al remodelarla así:
cantantes = new ArrayList<String>(2);
Tienes en esta clase un método:
setCantante(String name)
que parece un setter cuando no lo es, sería mejor llamarlo
añadirCantante, addCantante, incluirCantante, o algo por el estilo indicando que su tarea es esa, añadir un nuevo cantante.
----
En la clase Test creas la instancia 'Lista' de tipo ListaCantantesFamosos que siguiendo la convención camelCase debería llamarse 'lista'
El siguiente código:
int i = 0;
for(String data: Lista.cantantes){
System.out.println(i+1 + ". " + data + ".");
i++;
}
aunque escueto, debería formar parte de la clase ListaCantantesFamosos pues manipula datos de esa clase. Por cierto el atributo de esa clase 'cantantes' debería ser private y no ser accesible directamente desde la clase Test.
En esta clase, la variable 'si' se inicializa en cada bucle y no toma parte en ninguna decisión del código, si fuera eliminada, el programa funcionaria exactamente igual.
Saludos