Autor Tema: Java. Clase ArrayList, recorrer colección usando un bucle for CU00665B  (Leído 3493 veces)

lpeiro61

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
Hola, pongo las dos clases de este ejercicio.

Código: [Seleccionar]
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.

Código: [Seleccionar]
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?
« Última modificación: 30 de Marzo 2016, 16:48 por pedro,, »

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:Ejercicio Java CU00665B
« Respuesta #1 en: 30 de Marzo 2016, 00:51 »
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í:

Código: [Seleccionar]
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:

Código: [Seleccionar]
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:

Código: [Seleccionar]
public void setNombre(String nombre){
        nombreLista = nombre;
    }

método en la clase "ListaCantantesFamosos" e invocarlo posteriorme en la clase "TestListaCantantes" así:

Código: [Seleccionar]
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

clasificado como un "ejercicio ejemplo".

Saludos.

lpeiro61

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
Re:Ejercicio Java CU00665B
« Respuesta #2 en: 30 de Marzo 2016, 10:37 »
Muchísimas gracias por los consejos.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".