Hola momo
Tu ejercicio es operativo y funciona, pero quiero señalarte varios puntos.
Tu clase
CantanteFamoso, carece de métodos set.
Continúa siendo operativa, pero está coja, no se puede aprovechar su funcionalidad al 100%
Tienes que partir de la máxima de:
Un atributo, un método set y uno get. Sin excepción. Si no, serian unos atributos inamovibles, que no se pueden modificar.
Tampoco declaras un constructor sin parámetros.
Piensa que te puede interesar crear un CantanteFamoso ahora, para más tarde rellenar sus atributos (con los métodos set)
En tu clase
ListaCantanteFamoso (era más adecuado ListaCantantesFamosos, ahora parece que tu lista solo tendrá un cantante)
Tienes este método
public void addCantante(String valorNombre,String valorDiscoConMasVentas)
Como argumentos le das al método los atributos del nuevo cantante, pero lo correcto es que le des un argumento solo, así:
public void addCantante(CantanteFamoso nuevoCantante)
Los atributos del cantante ya se gestionarán en la clase CantanteFamoso pues es su trabajo.
Además este código tiene la ventaja de trabajar con objetos.
Piensa que si más tarde añades un nuevo atributo a la clase CantanteFamoso. Tendrías que venir aquí y añadir el parámetro al método addCantante.
En cambio si le das como parámetro un objeto (CantanteFamoso) ya vendrá con sus atributos inicializados.
Otra cosa, este método addCantante no lo usas para añadir cantantes. Está creado, pero no lo usas en ningún momento.
Para añadir cantantes usas el método 'add', tal vez sin saberlo, de la clase importada ArrayList.
El método
public void agregar()
que colocas en esta clase, debería estar en la clase con main
El método main es el que se encarga de dirigir el trabajo, da instrucciones a las otras clases usando sus métodos, los métodos de ellas para realizar el trabajo.
Además, ya tienes un método para añadir cantantes (aunque no lo hayas usado)
El método
public void mostrarLista()
Es un método apropiado en la clase ListaCantanteFamoso para mostrar el contenido del ArrayList
Finalmente en la clase
TestListaCantanteFamosoCrea una clase test con el método main que inicialice un objeto ListaCantantesFamosos y añade manualmente dos objetos de tipo CantanteFamoso a la la lista. Usando iterator muestra los nombres de cada cantante y su disco con más ventas por pantalla. Se debe pedir al usuario un nombre y disco con más ventas de otro cantante famoso, y una vez introducidos los datos mostrar la lista actualizada usando iterator. Una vez mostrada la lista actualizada, se debe dar opción a elegir entre volver a introducir los datos de otro cantante o salir del programa (se podrán introducir tantos datos de cantantes como se desee. Para ello usa un bucle while que dé opción a elegir al usuario).
Se pide crear dos cantantes y mostrar sus atributos por pantalla
Tu creas un cantante, que por cierto no lo creas con su clase CantanteFamoso, sino con la clase ListaCantanteFamoso (incorrecto)
Luego pides los datos para un nuevo cantante para mostrar al fin los cantantes que tienes en la lista.
A partir de aquí el código cumple, mostrando cada vez que añades un cantante, la lista completa de cantantes hasta que escoges salir del bucle.
Te pongo un enlace para que tengas otras referencias.
https://www.aprenderaprogramar.com/foros/index.php?topic=1030.msg5823#msg5823Saludos