Hola xBag
Tu ejercicio está perfecto.
Además de las clases con todos sus métodos, el proyecto cumple todos los requisitos solicitados. Me refiero a:
1º El programa introduce al ejecutarse dos cantantes en la lista y los muestra.
2º Pide los datos para añadir un nuevo cantente y muestra la lista actualizada
3º Y a partir de ahora preguntará si se quieren añadir más cantantes y repite el bucle.
Bien.
Además quiero comentarte algo sobre tu código.
Has decidido que para añadir un nuevo cantante se debe introducirse la palabra 'si' con todas sus letras, igualmente para salir sin añadir más cantantes debe introducirse la palabra 'no' con todas sus letras. Solo son dos letras, mejor que introducir 'si, por favor' o 'no, gracias'.
Para un caso como este, en que las dos opciones (si y no) se excluyen la una a la otra, bastaría con proporcionar el código para una opción (si no se escoge esa opción, por exclusión se toma la otra)
---
Luego repites varias líneas de código, por ejemplo:
while (!respuesta.getEntrada().equalsIgnoreCase("si") || !respuesta.getEntrada().equalsIgnoreCase("no")){
if(respuesta.getEntrada().equalsIgnoreCase("si") || respuesta.getEntrada().equalsIgnoreCase("no") ) {break;}
System.out.println("\nEscriba si o no por favor.");
respuesta.pedirEntrada();
Aunque el código es operativo, le quita elegancia y eficiencia al programa el hecho de repetir el mismo código.
---
Siguendo las líneas de tu código, utilizas dos formas de salir del código que son a mi modo de ver bruscas/rompedoras
La primera: System.exit(1)
Esta instrucción cierra el programa en el acto. Por decirlo de otra manera, sales de casa 'desapareciendo, esfumándote en el aire' como si viajases a otra dimensión. No das oportunidad a despedirse de la familia o los amigos que estén en casa.
La segunda: break (dentro del while)
Con esta sentencia poniendo otro símil, sales de la habitación rompiendo la pared sin usar la puerta.
Es cierto que estas formas de salir, son rápidas y efectivas, pero para mí no son elegantes.
A continuación te muestro una versión modificada de tu clase Test2 para que veas otra forma que gestionar un bucle while.
Algunas líneas de tu código las he convertido en comentario y he añadido las mías.
public class Test2B {
public static void main (String [] args){
ListaDeCantantesFamosos Lista = new ListaDeCantantesFamosos();
CantanteFamoso cantante1 = new CantanteFamoso("Romeo", "The last");
CantanteFamoso cantante2 = new CantanteFamoso("Juan Luis Guerra", "Abejas");
Lista.nuevoCantante(cantante1);
Lista.nuevoCantante(cantante2);
System.out.println ("\f\tLa lista inicialmente contiene los siguientes datos:");
Lista.mostrarTodos();
// System.out.println("\fIntroduzca el nombre de un nuevo cantante");
EntradaDeTeclado entrada; // = new EntradaDeTeclado();
// System.out.println("Introdzuca el disco más vendido de dicho cantante");
// EntradaDeTeclado entrada2 = new EntradaDeTeclado();
// CantanteFamoso cantanteIngresado = new CantanteFamoso(entrada.getEntrada(), entrada2.getEntrada());
// Lista.nuevoCantante(cantanteIngresado);
// Lista.mostrarTodos();
// System.out.println("\nQuiere continuar?(si o no): ");
// EntradaDeTeclado respuesta = new EntradaDeTeclado();
// if (respuesta.getEntrada().equalsIgnoreCase("no")){System.exit(1);}
// while (!respuesta.getEntrada().equalsIgnoreCase("si") || !respuesta.getEntrada().equalsIgnoreCase("no")){
// if(respuesta.getEntrada().equalsIgnoreCase("si") || respuesta.getEntrada().equalsIgnoreCase("no") ) {break;}
// System.out.println("\nEscriba si o no por favor.");
// respuesta.pedirEntrada();
// }
// while(respuesta.getEntrada().equalsIgnoreCase("si")) {
// System.out.println("Introduzca el nombre de un nuevo cantante");
// EntradaDeTeclado nuevoCantante = new EntradaDeTeclado();
// System.out.println("Introdzuca el disco más vendido de dicho cantante");
// EntradaDeTeclado nuevoDisco = new EntradaDeTeclado();
// CantanteFamoso otroCantante = new CantanteFamoso(nuevoCantante.getEntrada(), nuevoDisco.getEntrada());
// Lista.nuevoCantante(otroCantante);
// Lista.mostrarTodos();
// System.out.println("\nQuiere continuar? (si o no): ");
// respuesta.pedirEntrada();
// while (!respuesta.getEntrada().equalsIgnoreCase("si") || !respuesta.getEntrada().equalsIgnoreCase("no")){
// if(respuesta.getEntrada().equalsIgnoreCase("si") || respuesta.getEntrada().equalsIgnoreCase("no") ) {break;}
// System.out.println("\nEscriba si o no por favor.");
// respuesta.pedirEntrada();
//
// }
// }
boolean cantanteNuevo = true;
String nuevoCantante = "", nuevoDisco = "",lecturaTeclado = "";
do {
System.out.println("\n\tPor favor, introduzca los datos de otro cantante.");
// Toma el nuevo nombre
System.out.print(" ¿Nombre?: ");
entrada = new EntradaDeTeclado();
nuevoCantante = entrada.getEntrada();
// Toma el nuevo disco
System.out.print("¿Disco mas vendido?: ");
entrada = new EntradaDeTeclado();
nuevoDisco = entrada.getEntrada();
// Crea y añade el nuevo cantante
cantante2 = new CantanteFamoso(nuevoCantante,nuevoDisco);
Lista.nuevoCantante(cantante2);
System.out.println ("\n\tLa lista actualizada contiene los siguientes datos:");
Lista.mostrarTodos();
// Decide si continúa
System.out.print("\nQuiere continuar?. Pulse (S) para si, cualquier otra tecla para no: ");
entrada = new EntradaDeTeclado();
lecturaTeclado = entrada.getEntrada();
if (lecturaTeclado.length() == 0) { cantanteNuevo = false; // Se ha pulsado INTRO solamente. Salimos
} else if (lecturaTeclado.substring(0,1).equalsIgnoreCase("s")) { // Se pedirá otro cantante
} else { cantanteNuevo = false; // Se ha pulsado cualquier otra cosa. Salimos
} // fin del if
} while (cantanteNuevo);
System.out.println ("\t*** Finalizada la gestion de cantantes ***");
}
}
Saludos