Gracias Jorge Lopez por tus consejos y recomendaciones. Despues de mucho trabajo y darle muchas vueltas he conseguido realizar la tarea tal como tenia en mi cabeza. No se hacerlo mejor, espero que este a la altura.
En primer lugar la clase Famoso que contiene los objetos de cantantes famosos y sus discos
/**
* Esta clase describe objetos de tipo Famoso que esta compuesto por:
* - objetos de tipo String que describen el nombre del cantante.
* - objetos de tipo String que describen el disco más vendido del cantante.
* @div_vz
*/
public class Famoso
{
String nombre;
String discoMasVendido;
/**
* constructor:
* pide la entrada de dos objetos de tipo String;
* vNombre que registra el valor nombre.
* vDisco que registra el valor discoMasVendido.
*/
public Famoso(String vNombre, String vDisco) {
nombre = vNombre;
discoMasVendido = vDisco;
}
//Método para introducir el valor nombre
public void setNombre(String vNombre) {
nombre = vNombre;
}
//Método para introducir el valor discoMasVendido
public void setDiscoMasVendido(String vDisco) {
discoMasVendido = vDisco;
}
//dos métodos que nos devuelven el valor de los objetos nombre y discoMasVendido
public String getNombre() {
return nombre;
}
public String getDiscoMasVendido() {
return discoMasVendido;
}
}
En segundo lugar la clase ListaCantantesFamosos que contiene la lista con los objetos de tipo Famoso, asi como los métodos para añadir cantantes, devolver el tamaño, etc. Tambien he utilizado la clase Iterator para crear un método que me permita imprimir todas las referencias a objetos Famoso y sus atributos que hay en la lista, siguiente tu idea.
/**
* Esta clase describe un objeto ArrayList;
* compuesto por objetos de la clase Famoso
* @div_vz
*/
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
public class ListaCantantesFamosos
{
private ArrayList<Famoso> listaCantantesFamosos;
private String nombreLista;
/**
* constructor:
* Crea un nuevo objeto de tipo ArrayList;
* contiene dos objetos Famoso
*/
public ListaCantantesFamosos() {
nombreLista = "------- CANTANTES FAMOSOS -------";
listaCantantesFamosos = new ArrayList<Famoso>();
listaCantantesFamosos.add(new Famoso("Michael Jackson", "Thriller"));
listaCantantesFamosos.add(new Famoso("Madonna", "All I want is you"));
}
//Método para añadir un objeto de tipo famoso al objeto listaCantantesFamosos
public void addFamoso() {
System.out.println("\nPor favor! Introduzca el nombre del cantante: ");
EntradaPalabras entradaNombre = new EntradaPalabras();
System.out.println("\nPor favor! Introduzca el nombre del disco del cantante: ");
EntradaPalabras entradaDisco = new EntradaPalabras();
listaCantantesFamosos.add(new Famoso(entradaNombre.getPalabra(), entradaDisco.getPalabra()));
}
//Método para imprimir los objetos de la lista usando Iterator
public void imprimirLista() {
System.out.println("\n" + getNombreLista());
Iterator<Famoso> it = listaCantantesFamosos.iterator();
Famoso tmpCantante;
while (it.hasNext()) { //usamos while para recorrer todos los elmentos de la lista
int i;
for (i = 0; i < getTamaño(); i++) { //Aprovecho el metodo getTamaño para poder imprimir el orden numerado
tmpCantante = it.next();
System.out.println("\n" + (i+1) + " - Nombre: " + tmpCantante.getNombre() +
"\n Disco más vendido: " + tmpCantante.getDiscoMasVendido());
}
}
}
//Método que devuelve el tamaño del objeto listaCantantesFamosos
public int getTamaño() {
return listaCantantesFamosos.size();
}
//Método que devuelve el nombre de la lista
public String getNombreLista() {
return nombreLista;
}
}
En tercer lugar la clase Test que contiene el método main y que dirige el programa y relaciones de las clases:
/**
* Esta clase describe el metodo main;
* dirige el programa que relaciona las clases:
* Famoso y ListaCantantesFamoso
* @div_vz
*/
public class TestCantantesFamosos
{
public static void main(String[] args) {
System.out.println("Esta es una relación de cantantes famosos y sus superventas");
ListaCantantesFamosos lista = new ListaCantantesFamosos();
lista.imprimirLista();
//utilizo while para crear un bucle que me permita añadir todas las referencias que se deseen
boolean lanzador = true;
while (lanzador == true) {
System.out.println("\n¿Desea añadir un nuevo cantante a la lista?(y/n)");
EntradaPalabras confirmador = new EntradaPalabras();
if (confirmador.getPalabra().equalsIgnoreCase("y")) {
lista.addFamoso();
System.out.println("\nEsta es su lista actualizada compuesta por " + (lista.getTamaño()) + " cantantes");
lista.imprimirLista();
} else {
lanzador = false;
System.out.println("\nEspero que haya disfrutado del programa.\n\nDesarrollado por @dib_vz");
}
}
}
}
Y para terminar dejo aqui la clase que cree para utlizar la clase scanner de java:
import java.util.Scanner;
public class EntradaPalabras
{
private String palabra;
//constructor
public EntradaPalabras() {
palabra = "";
pedirPalabra();
}
//metodo para pedir una entrada de teclado
public void pedirPalabra() {
Scanner entradaEscaner = new Scanner(System.in);
palabra = entradaEscaner.nextLine();
}
public String getPalabra() {
return palabra;
}
public int getLongitud() {
return palabra.length();
}
}
Espero que os guste!