Hola, presento aquí el ejercicio de la lección CU00666B
EJERCICIO
Crea una clase denominada ListaCantantesFamosos que al ser inicializada contenga un ArrayList con
tres Strings que sean el nombre de cantantes famosos. Crea una clase test con el método main que
inicialice un objeto ListaCantantesFamosos y usando un for extendido muestre los cantantes en la lista
por pantalla. Se debe pedir al usuario un nombre más de cantante famoso, y una vez introducido
mostrar la lista actualizada usando un for extendido. Una vez mostrada la lista actualizada, se debe dar
opción a elegir entre volver a introducir otro cantante o salir del programa (se podrán introducir tantos
cantantes como se desee, para ello usa un bucle while que dé opción a elegir al usuario).
Ejercicio formado por 3 clases:
Clase TestCantantes con main
import java.lang.Iterable;
/**
* Detalles de la clase.
* Crea un objeto del tipo ListaCantantesFamosos y edita su contenido.
* @author (Toni)
* @version (0)
*/
public class TestCantantes {
// Atributos de la clase TestCantantes
/**
* Constructor para objetos de la clase TestCantantes
*/
public TestCantantes() {
// Inicializa atributos
} // Fin del constructor TestCantantes
// Siguen los setters para los atributos de la clase TestCantantes
// Ahora los getters para los atributos de la clase TestCantantes
// Y seguidamente, procedimientos y funciones varios.
public static void main (String [] args) {
// listaCF nuevo objeto ListaCantantesFamosos.
ListaCantantesFamosos listaCF = new ListaCantantesFamosos("Nombre Cantante");
// mensaje presentará mensajes o/y pedirá entradas por teclado.
Mensaje mensaje = new Mensaje("\tSe ha creado una lista de cantantes.\n\tCon los " + listaCF.getTamañoLista() + " elementos siguientes:");
listaCF.presentaElementos();
String lectura = ""; // Texto introducido por teclado
boolean quieresContinuar = true; // Controla la condición del while principal
boolean presentarMenu = true; // Controla el while anidado
boolean seHaEliminado = false; // Si se elimina un elemento, será true
int elemento = -1; // Número del elemento a eliminar
do { // Bucle para editar la lista de cantantes, while principal
lectura = mensaje.responde ("\tIntroduzca un nuevo nombre para añadir a la lista.",1);
listaCF.addNombreNuevo(lectura); // Añade a la lista
mensaje.muestra ("La lista con " + listaCF.getTamañoLista() + " elementos, queda como sigue:");
listaCF.presentaElementos();
presentarMenu = true; // Controla el siguiente while anidado
while (presentarMenu) { // Este es el menú de opciones
lectura = mensaje.responde (
"\tSi quiere continuar editando la lista pulse:\n" +
"\t\"L\" = Elimina último elemento.\n" +
"\t\"R\" = Elimina cualquier otro elemento.\n" +
"\t\"A\" = Añade nuevo elemento.\n" +
"\tCualquier otra tecla para salir.",1);
if (lectura.length() == 0) { // Se ha pulsado INTRO solamente
presentarMenu = false; // Salir del while anidado
quieresContinuar = false; // Salir del while principal
} else if (lectura.substring(0,1).toUpperCase().equals("L")) { // Eliminar último elemento de la lista
seHaEliminado = listaCF.removeNombreDeLaLista(listaCF.getTamañoLista() - 1);
listaCF.presentaElementos();
if (seHaEliminado) { mensaje.muestra ("\tEliminada la última entrada de la lista."); }
else { mensaje.muestra ("\tLa lista no tiene elementos. No se puede eliminar nada."); }
} else if (lectura.substring(0,1).toUpperCase().equals("R")) { // Escoger el elemento a eliminar
lectura = mensaje.responde ("\tPor favor.\nIntroduzca el número del elemento que quiere borrar:",0);
elemento = Integer.parseInt(lectura);
seHaEliminado = listaCF.removeNombreDeLaLista(elemento - 1);
listaCF.presentaElementos();
if (seHaEliminado) { mensaje.muestra ("\tEl elemento " + elemento + " ha sido eliminado con éxito."); }
else { mensaje.muestra ("\tEl elemento " + elemento + " no se ha podido eliminar."); }
} else if (lectura.substring(0,1).toUpperCase().equals("A")) { // Continua pidiento entradas.
presentarMenu = false; // Salir del while anidado
} else { // Se ha pulsado cualquier otra cosa distinta. Salimos.
presentarMenu=false; // Salir del while anidado
quieresContinuar = false; // Salir del while principal
} // Fin del if
} // Fin while anidado presentarMenu
} while (quieresContinuar); // Fin del while principal quieresContinuar
mensaje.muestra ("\tHemos salido de la lista de cantantes.\n\tGracias por su atención.");
} // Fin del main
} // Fin de la clase TestCantantes
Clase ListaCantantesFamosos, crea un ArrayList con los cantantes introducidos.
import java.util.ArrayList;
/**
* Detalles de la clase.
*
* @author (Toni)
* @version (0)
*/
public class ListaCantantesFamosos {
// Atributos de la clase ListaCantantesFamosos
private String nombreDeLaLista;
private ArrayList<String> lista_de_cantantes;
/**
* Constructor para objetos de la clase ListaCantantesFamosos
*/
public ListaCantantesFamosos(String nombreCantante) {
// Inicializa atributos
nombreDeLaLista = nombreCantante;
lista_de_cantantes = new ArrayList<String>();//Crea el objeto ArrayList con el tamaño por defecto
//Estos tres cantantes siempre figurarán en la lista.
addNombreNuevo("Sabina");
addNombreNuevo("Madonna");
addNombreNuevo("Julio Iglesias");
} // Fin del constructor ListaCantantesFamosos
// Siguen los setters para los atributos de la clase ListaCantantesFamosos
// Ahora los getters para los atributos de la clase ListaCantantesFamosos
// Y seguidamente, procedimientos y funciones varios.
public void addNombreNuevo (String valorNombre) { lista_de_cantantes.add (valorNombre); }
public String getNombreDeLaLista (int posicion) {
if (posicion >= 0 && posicion < lista_de_cantantes.size()) {
return lista_de_cantantes.get(posicion);
} else {
return "No hay ningún nombre en la posición: " + posicion;
}
}// fin del get
public int getTamañoLista () { return lista_de_cantantes.size(); }
public boolean removeNombreDeLaLista (int posicion) {
if (posicion >= 0 && posicion < lista_de_cantantes.size()) {
lista_de_cantantes.remove(posicion);
return true;//remove OK
} else {
return false; // remove KO
}
}// fin del remove...
/**
* Presenta elementos del ArrayList usando un 'for extendido'
*/
public void presentaElementos() {
int i = 0;
for (String nombre: lista_de_cantantes) {
System.out.println ("Elemento " + (++i) + ": " + nombre);
}
if (i == 0) { System.out.println ("Sin elementos. Lista vacía."); }
}// fin del presentaElementos
} // Fin de la clase ListaCantantesFamosos
Clase Mensaje, presenta mensajes en pantalla o/y devuelve entradas de teclado.
import java.util.Scanner;
/**
* Detalles de la clase. El método presenta mensajes por pantalla... y devuelve entradas de teclado
* @author (Toni)
* @version (0)
*/
public class Mensaje { // Atributos de la clase Mensaje
private String texto;
private int valor;
/**
* Mostrará el texto con salto de línea final.
*/
public Mensaje (String frase) { //Constructor 1 parámetro para objetos de la clase Mensaje. Inicializa atributos
texto = frase;
valor = 1;
muestra (texto, valor);
}
/**
* Valores param:
* 0 = Sin salto de línea.
* 1, u otro valor = Con salto de línea.
*/
public Mensaje (String frase, int param) {
texto = frase;
valor = param;
muestra (texto, valor);
}
// Siguen los setters para los atributos de la clase Mensaje
public void setTexto (String texto) { this.texto = texto; }
public void setValor (int valor) { this.valor = valor; }
// Ahora los getters para los atributos de la clase Mensaje
public String getTexto () { return texto; }
public int getValor () { return valor; }
// Y seguidamente, procedimientos y funciones varios.
/**
* Mostrar el texto con salto de línea (sin segundo parámetro)
*/
public void muestra (String frase) {
muestra (frase, 1);
}// fin de muestra 1 parámetro
/**
* Valores param:
* 0 = Sin salto de línea.
* 1, u otro valor = Con salto de línea.
*/
public void muestra (String frase, int param) {
texto = frase;
valor = param;
if (valor == 0) { System.out.print (texto + " ");
} else { System.out.println (texto); }
}// fin de muestra 2 parámetros
/**
* Sin segundo parámetro el mensaje incluirá salto de línea. Devuelve entrada de teclado
*/
public String responde (String frase) {
return responde (frase, 1);
}// fin de responde 1 parámetro
/**
* Valores param:
* 0 = Sin salto de línea + entrada por teclado.
* 1, u otro valor = Con salto de línea + entrada por teclado.
*/
public String responde (String frase, int param) {
texto = frase;
valor = param;
muestra (texto, valor);
Scanner entradaEscaner = new Scanner(System.in);
return entradaEscaner.nextLine();
}// fin de responde 2 parámetros
} // Fin de la clase Mensaje
Ya me habéis dicho que hago los mains recargados. Si, lo reconozco. Pero es que quiero que hagan cosas y necesito cargarlos.
Pregunta: ¿Sería preferible desglosar el main en varios métodos aunque eso implicara más líneas de código en la clase?
Como siempre, apreciaré vuestros consejos.
Saludos