Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: jupertivo en 15 de Abril 2015, 21:22
-
Hola a tod@s. A continuación transcribo el código del ejercicio propuesto.
Clase TestListaCantantesFamosos, con el 'main':
public class TestListaCantantesFamosos {
public static void main (String [ ] args) {
String nombreDeLaLista="\"Cantantes famosos\"";
EntradaDeTeclado entrada;
int veces=1;
System.out.println("Empezamos el programa. Para salir, pulse 'return'");
ListaCantantesFamosos lista=new ListaCantantesFamosos(nombreDeLaLista);
System.out.println("La lista se llama: "+nombreDeLaLista);
lista.listarTodosLosNombres();
do{ //Bucle do-while para ingresar datos en la lista
if (veces==1) {System.out.println("\nIntroduzca un/a cantante más:");}
else if (veces==2) {
System.out.println("\nIntroduzca más cantantes. Para salir, pulse 'return'");
veces++; }
entrada=new EntradaDeTeclado();
if(entrada.getContinuar()) {//el 'if' evita que el 'Return' último sea añadido a la lista
lista.addNombre(entrada.getEntrada());
if(veces==1) {lista.listarTodosLosNombres();veces++;}}}
while(entrada.getContinuar()); ////Si pulso 'Return', se acabará la introducción de datos
lista.listarTodosLosNombres();} }
Clase ListaCantantesFamosos:
import java.util.ArrayList;
public class ListaCantantesFamosos { //Clase que representa una lista de nombres manejada con la clase ArrayList de Java
private String nombreDeLaLista; //Establecemos un atributo nombre de la lista
private ArrayList<String>listadenombres; //Declaramos un ArrayList que contiene objetos String
public ListaCantantesFamosos(String nombre) { //Constructor: crea una listainicial de 3 cantantes
nombreDeLaLista=nombre;
listadenombres=new ArrayList<String>();
listadenombres.add("Aretha Franklin");listadenombres.add("Etta James");listadenombres.add("Nina Simone");
}//Creamos el objeto de tipo ArrayList
public void addNombre(String valor_nombre) {listadenombres.add(valor_nombre);}
public void listarTodosLosNombres() {
int i=1;
if (listadenombres.size()!=0) {
System.out.println("\nLa lista está formada por "+listadenombres.size()+" cantantes");
//System.out.println("Mostramos todos los nombres con un ciclo for-each");
for (String nombre:listadenombres) { //Ciclo for-each
System.out.println("Cantante "+i+": "+nombre);i++;} }
else {System.out.println("La lista está vacía");} } }
Clase EntradaDeTeclado:
import java.util.Scanner;
public class EntradaDeTeclado {
private String entradaTeclado;
boolean continuar=true;
public EntradaDeTeclado() { //Constructor
entradaTeclado="";
pedirEntrada(); } //Al crear un objeto, se ejecuta este método
public void pedirEntrada() {
Scanner entradaEscaner=new Scanner(System.in);
entradaTeclado=entradaEscaner.nextLine();
if (entradaTeclado.length()==0) {continuar=false;} }
//Si pulso 'Return', no se introducirán más datos
public boolean getContinuar() {return continuar;}
public String getEntrada() {return entradaTeclado;} }
Gracias por vuestra atención. Saludos.
-
Hola jupertivo debajo te comento un problema que he observado
La idea de if (entradaTeclado.length()==0) {continuar=false;} me parece bastante buena, así evitas que se pueda pulsar enter sin que se introduzcan datos
Has añadido los nombres en el constructor en
public ListaCantantesFamosos(String nombre) { //Constructor: crea una listainicial de 3 cantantes
nombreDeLaLista=nombre;
listadenombres=new ArrayList<String>();
listadenombres.add("Aretha Franklin");listadenombres.add("Etta James");listadenombres.add("Nina Simone");
}//Creamos el objeto de tipo ArrayList
Esto puede hacerse, aunque otra opción era hacerlo fuera del constructor.
La cosa a corregir que parece un fallo: si introduzco cantantes llega un momento en que no me deja introducir más, por ejemplo
Empezamos el programa. Para salir, pulse 'return'
La lista se llama: "Cantantes famosos"
La lista está formada por 3 cantantes
Cantante 1: Aretha Franklin
Cantante 2: Etta James
Cantante 3: Nina Simone
Introduzca un/a cantante más:
Jim Morrison
La lista está formada por 4 cantantes
Cantante 1: Aretha Franklin
Cantante 2: Etta James
Cantante 3: Nina Simone
Cantante 4: Jim Morrison
Introduzca más cantantes. Para salir, pulse 'return'
Bono
La lista está formada por 5 cantantes
Cantante 1: Aretha Franklin
Cantante 2: Etta James
Cantante 3: Nina Simone
Cantante 4: Jim Morrison
Cantante 5: Bono
Después de introducir Bono ya no me deja introducir más cantantes.
Salu2
-
Hola Ogramar. Gracias por tus comentarios y puntualizaciones. Lo de inicializar una lista, p.e., tenía entendido que era mejor hacerlo en el constructor. Igual estoy confundido, que no me extrañaría, ya que son muchos conceptos y, a veces, se atropellan unos a otros.
Sí, con la línea siguiente de la clase EntradaDeTeclado, se detecta si se ha pulsado 'Return'.
if (entradaTeclado.length()==0) {continuar=false;}
Aprovecho eso para salir de la introducción de cantantes en la lista en cualquier momento, y para evitar añadir el último 'Return' en la misma.
Respecto a que no te deja introducir más cantantes después de 'Bono', no sé. He vuelto a ejecutar el código y, a mí, si me deja metar cantantes hasta que pulso 'Return' para salir. Lo único es que el mensaje en pantalla "Introduzca más cantantes. Para salir, pulse 'return' ".ya no vuelve a salir después de introducir el quinto cantante. Diseñé el código así para evitar más líneas en pantalla cada vez que introducía un cantante. Lo único que aparece en pantalla es el cursor parpadeando en la siguiente línea.
Gracias por tu atención
-
Sí, era eso lo que pasaba... al no aparecer el mensaje de que introdujera otro dato veía el cursor parpadeando y pulsaba enter y el programa terminaba, por eso me pareció que era un error ;D