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 12 de Abril 2015, 21:01
-
Hola a tod@s. Os transcribo los códigos del ejercicio propuesto en esta lección. Me ha costado depurarlo para dejarlo como está. Quería que me pidiera cantantes hasta una indicación para finalizar. Pero ahora funciona (por el momento ;D). Me ha servido de mucho los comentarios en https://www.aprenderaprogramar.com/foros/index.php?topic=2220.msg10706#msg10706 (https://www.aprenderaprogramar.com/foros/index.php?topic=2220.msg10706#msg10706).
Primero la clase TestListaCantantesFamosos, donde está el 'main':
public class TestListaCantantesFamosos {
public static void main (String [ ] args) {
EntradaDeTeclado entrada;
System.out.println ("Empezamos el programa. Para salir, pulse 'return'");
ListaCantantesFamosos lista = new ListaCantantesFamosos("Cantantes introducidos por usuario");
do{
System.out.println ("Por favor introduzca un/a cantante:");
entrada=new EntradaDeTeclado();
lista.addNombre (entrada.getEntrada()); }
while(entrada.getContinuar()); ////Si pulso 'Return', 'while' será falso y se acabará la introducción de datos
System.out.println ("La lista ha quedado formada por "+(lista.getTamaño()-1)+" cantantes");
for (int i=0;i<lista.getTamaño()-1;i++) {
System.out.println ("Cantante "+(i+1)+": "+lista.getNombre(i));} } }
A continuación, la clase ListaCantantesFamosos, para crear un ArrayList:
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 lista de nombres vacía
nombreDeLaLista=nombre;
listadenombres=new ArrayList<String>();
System.out.println ("La lista se llama: "+nombreDeLaLista);
}//Creamos el objeto de tipo ArrayList
public void addNombre (String valor_nombre) {listadenombres.add (valor_nombre);}
public String getNombre (int posicion) {
if (posicion>=0 && posicion<listadenombres.size()) {
return listadenombres.get(posicion);}
else {return "No existe nombre para la posición solicitada";} }
public int getTamaño () {return listadenombres.size();} }
Por último, la 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', saldré del programa
public boolean getContinuar () {return continuar;}
public String getEntrada () {return entradaTeclado;} }
Saludos y gracias a tod@s.
-
Hola jupertivo tu clase EntradaDeTeclado está bien planteada.
En la clase ListaCantantesFamosos tienes esto:
public ListaCantantesFamosos (String nombre) { //Constructor: crea una lista de nombres vacía
nombreDeLaLista=nombre;
listadenombres=new ArrayList<String>();
System.out.println ("La lista se llama: "+nombreDeLaLista);
}//Creamos el objeto de tipo ArrayList
Si ves comentarios en otros hilos verás que se recomienda no incluir System.out.println dentro de constructores ni métodos porque la responsabilidad de un constructor es inicializar los atributos de un objeto, no debe hacer nada más que esto (en el caso de métodos, debe cumplir con su responsabilidad y nada más que eso).
En cambio aquí sí lo tienes bien planteado:
public String getNombre (int posicion) {
if (posicion>=0 && posicion<listadenombres.size()) {
return listadenombres.get(posicion);}
else {return "No existe nombre para la posición solicitada";} }
Este método devuelve un String, que puede ser el nombre de la lista, o si no existe un String que es un aviso de que no existe nombre para la posición solicitada.
Tu clase con el main está muy bien, en pocas líneas haces uso de los objetos y diriges el programa.
Supongo que te habrás dado cuenta de que aunque tu código funciona bien no has cumplido con lo que pedía el enunciado:
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, pida dos cantantes famosos más al usuario, los añada a la lista y muestre el contenido de la lista por pantalla.
Salu2
-
Gracias Ogramar por tus comentarios.
Ya he quitado "System.out.println" del constructor de la clase "ListaCantantesFamosos" y lo he puesto en el 'main', insertando una función que devuelve el nombre de la lista en la 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 lista de nombres vacía
nombreDeLaLista=nombre;
listadenombres=new ArrayList<String>(); }//Creamos el objeto de tipo ArrayList
public void addNombre (String valor_nombre) {listadenombres.add (valor_nombre);}
public String getNombre (int posicion) {
if (posicion>=0 && posicion<listadenombres.size()) {
return listadenombres.get(posicion);}
else {return "No existe nombre para la posición solicitada";} }
public int getTamaño () {return listadenombres.size();}
public String getNombreDeLaLista () {return nombreDeLaLista;}}
public class TestListaCantantesFamosos {
public static void main (String [ ] args) {
EntradaDeTeclado entrada;
System.out.println ("Empezamos el programa. Para salir, pulse 'return'");
ListaCantantesFamosos lista = new ListaCantantesFamosos("Cantantes introducidos por usuario");
do{
System.out.println ("Por favor introduzca un/a cantante:");
entrada=new EntradaDeTeclado();
lista.addNombre (entrada.getEntrada()); }
while(entrada.getContinuar()); ////Si pulso 'Return', 'while' será falso y se acabará la introducción de datos
System.out.println ("La lista se llama: "+lista.getNombreDeLaLista());
System.out.println ("La lista ha quedado formada por "+(lista.getTamaño()-1)+" cantantes");
for (int i=0;i<lista.getTamaño()-1;i++) {
System.out.println ("Cantante "+(i+1)+": "+lista.getNombre(i));} } }
Respecto a que no he hecho lo pedido en el ejercicio, tienes toda la razón. Sucedió que me puse a hacerlo de la forma indicada, pero me picó la curiosidad por encontrar una forma que me fuera pidiendo datos hasta que yo decidiera lo contrario ;D.
Gracias de nuevo por vuestra atención, y hoy a tí en particular.
-
Ya veo el cambio... Respecto a no adaptarse al enunciado del ejercicio, recomendamos seguir lo que dice el enunciado porque así es como se pueden comparar unas soluciones con otras y ver distintas ideas sobre cómo hacer una misma cosa. Si no se sigue el enunciado no se puede hacer esta comparación, aunque sí es cierto que también es recomendable "jugar" con el código, hacer distintas cosas, pruebas, variantes, etc. porque es la mejor forma de aprender.
Salu2