Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: lpeiro61 en 29 de Marzo 2016, 16:21
-
Hola, pongo las dos clases de este ejercicio.
import java.util.ArrayList;
public class ListaCantantesFamosos
{
private String nombreLista;
private ArrayList<String> listaCantantes;
public ListaCantantesFamosos(String nombre)
{
nombreLista = nombre;
listaCantantes = new ArrayList<String>();
listaCantantes.add("Sting");
listaCantantes.add("Bob Dylan");
listaCantantes.add("Loquillo");
}
public void addCantantes(String cantante1, String cantante2)
{
listaCantantes.add(cantante1);
listaCantantes.add(cantante2);
}
public void getCantante(int posicion)
{
System.out.println(listaCantantes.get(posicion));
}
public int getTamanyo()
{
return listaCantantes.size();
}
}
Y esta es la que contiene en main.
import java.util.Scanner;
public class TestListaCantantes
{
public static void main(String[] args)
{
ListaCantantesFamosos lista = new ListaCantantesFamosos("Cantantes Famosos");
String primerCantante;
String segundoCantante;
System.out.println("Introduce el primer cantante...");
Scanner entrada1 = new Scanner(System.in);
primerCantante = entrada1.nextLine();
System.out.println("Introduce el segundo cantante...");
Scanner entrada2 = new Scanner(System.in);
segundoCantante = entrada2.nextLine();
lista.addCantantes(primerCantante,segundoCantante);
System.out.println("\nLos cantantes son: ");
int tamanyo = lista.getTamanyo();
for(int i=0; i <tamanyo; i++)
{
lista.getCantante(i);
}
}
}
Una consulta:
En el constructor de la clase ListaNombres de ejemplo de este tema, al inicializarse un objeto, se pide el parámetro String nombre que creo que es para darle un nombre a lista que vamos a crear, ¿este nombre es sólo para identificar la lista o también se puede operar con él?
-
Buenas noches, Ipeiro61.
Primero que nada, quería decirte que has cumplido con el cometido del ejercicio de la entrega CU00665B del curso Java desde cero.
Dicho esto, me gustaría comentarte varias cositas sobre los dos códigos.
En el código "ListaCantantesFamosos", en el método "addCantantes()" no hace falta que pases dos parámetros, dado que los dos contendrán información relacionado a un mismo atributo. Aunque el ejercicio pida que se entren dos cantantes, no hace falta pasarle dos parámetros, simplemente tienes que invocar dos veces el mismo método. ¿Y si fueran 50 cantantes los que tenías que ingresar?
En programación prima la economía y la reutilización de los códigos, así que, algo que podríamos hacer con una instrucción no hace falta que lo hagamos con dos.
Por lo tanto, el código de la clase "ListaCantantesFamosos" quedaría "mejor" así:
import java.util.ArrayList;
public class ListaCantantesFamosos
{
private String nombreLista;
private ArrayList<String> listaCantantes;
public ListaCantantesFamosos(String nombre)
{
nombreLista = nombre;
listaCantantes = new ArrayList<String>();
listaCantantes.add("Sting");
listaCantantes.add("Bob Dylan");
listaCantantes.add("Loquillo");
}
public void addCantantes(String cantante)
{
listaCantantes.add(cantante);
}
public void getCantante(int posicion)
{
System.out.println(listaCantantes.get(posicion));
}
public int getTamanyo()
{
return listaCantantes.size();
}
}
En el código "TestListaCantantes" te podrías ahorrar declarar las dos variables "primerCantante" y "segundoCantante" haciéndolo de la siguiente forma:
import java.util.Scanner;
public class TestListaCantantes
{
public static void main(String[] args)
{
ListaCantantesFamosos1 lista = new ListaCantantesFamosos("Cantantes Famosos");
String cantante;
System.out.println("Introduce el primer cantante...");
Scanner entrada = new Scanner(System.in);
cantante = entrada.nextLine();
lista.addCantantes(cantante); //Añadimos el primer cantante en la lista invocando el método "addCantantes()"
System.out.println("Introduce el segundo cantante...");
cantante = entrada.nextLine(); //Reutilizamos la variable cantante
lista.addCantantes(cantante); //Añadimos el segundo cantante en la lista invocando el método "addCantentes()"
System.out.println("\nLos cantantes son: ");
int tamanyo = lista.getTamanyo();
for(int i=0; i <tamanyo; i++)
{
lista.getCantante(i);
}
}
}
En relación con la consulta que haces al final de tu hilo, decirte que podrías modificar el valor de la variable "nombre" de un objeto "ListaCantentesFamosos" si tuvieras este:
public void setNombre(String nombre){
nombreLista = nombre;
}
método en la clase "ListaCantantesFamosos" e invocarlo posteriorme en la clase "TestListaCantantes" así:
lista.setNombre("aquiEscribesElNuevoValor");
Pero da la manera que tienes el constuctor de la clase "ListaCantantesFamosos" basta con pasarle como parámetro cualquier valor(nombre) que quieras para el atributo "nombreLista" y se te creará el objeto conteniendo dicho valor.
De todas maneras te recomiendo la lectura de:
https://www.aprenderaprogramar.com/foros/index.php?topic=1549.msg8169#msg8169 (https://www.aprenderaprogramar.com/foros/index.php?topic=1549.msg8169#msg8169)
clasificado como un "ejercicio ejemplo".
Saludos.
-
Muchísimas gracias por los consejos.