Autor Tema: Java diferencia entre introducir objetos en una lista con nombre o sin CU00667B  (Leído 2330 veces)

SantiagoArg

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 10
    • Ver Perfil
Terminé este ejercicio, me apoyé también en el código que había subido "xBag" (muchas gracias). He tratado de economizar el codigo lo mas que pude, en las Clases: CantanteFamoso y ListaCantantesFamosos fue donde menos se complico hacerlo
lamentablemente sigo viendo muy extenso el "main" de la Clase Test, supongo que con mas practica se podra hacer mucho mas sencillo.

DUDA: en las lineas 11 y 12 de "Test" tengo comentado 2 instrucciones que funcionan igual de bien que en las 14 y 15. Ahora, mi duda es la siguiente:
en las lineas comentadas tengo definidos e instanciados 2 objetos que tienen nombre
pero en las otras 2, solo veo que tengo creados 2 objetos ya dentro de la lista y no tienen nombre, si bien el codigo funciona como corresponde, ¿hay alguna diferencia entre esos objetos?

Clase CantanteFamoso
Código: [Seleccionar]
public class CantanteFamoso
{
   private String nombre; //Atributos
   private String discoConMasVentas;// Atributos   
   // Constructor sin parametros
   public CantanteFamoso()
   {
       nombre = "";
       discoConMasVentas = "";
   }
   // Constructor con parametros
   public CantanteFamoso(String nombre, String discoConMasVentas)
   {
       this.nombre = nombre;
       this.discoConMasVentas = discoConMasVentas;
   }
   // setters
   public void setNombre(String nombre){this.nombre = nombre;}
   public void setDiscoConMasVentas(String discoConMasVentas){this.discoConMasVentas = discoConMasVentas;}
   // getters
   public String getNombre(){return nombre;}
   public String getDiscoConMasVentas(){return discoConMasVentas;}
}


Clase ListaCantantesFamosos
Código: [Seleccionar]
import java.util.ArrayList; // Importo la clase que me permitira crear las listas
import java.util.Iterator;  // Importo la clase con la cual creare el objeto "it" (para poder modificar la copia de la lista

public class ListaCantantesFamosos
{
   private ArrayList<CantanteFamoso> listaCantantesFamosos; // Atributo, en este caso una lista
   
   // Constructor
   public ListaCantantesFamosos()
   {
       listaCantantesFamosos = new ArrayList<CantanteFamoso>();
   }
   // Setter
   public void addCantanteFamoso(CantanteFamoso elCantante)
   {
       listaCantantesFamosos.add(elCantante);
   }
   // getter
   public CantanteFamoso getCantanteFamoso(int elCantante)
   {
       return listaCantantesFamosos.get(elCantante);
   }
   // Este metodo no se ha usado en el ejercicio. Elimina un elemento de la lista
   public String removeCantanteFamoso(int elCantante)
   {
      if (elCantante >= 0 && elCantante < listaCantantesFamosos.size())
      {
          listaCantantesFamosos.remove(elCantante);
          return "Se ha eliminado el cantante seleccionado";
      }
      else
      {
          return "El cantante seleccionado no se encuentra en la lista";
      }
   }
   // procedimiento para mostrar la lista de CantantesFamosos
   public void mostrarLista()
   {
       Iterator<CantanteFamoso> it = listaCantantesFamosos.iterator();
       CantanteFamoso tmpCantante;
       while(it.hasNext())
       {
           tmpCantante = it.next();
           System.out.println("Cantante: " + tmpCantante.getNombre() + " disco con mayor venta: "+
           tmpCantante.getDiscoConMasVentas());
       }
   }
}

Clase Test
Código: [Seleccionar]
import java.util.Scanner; // Clase para poder trabajar con el flujo de datos

public class Test
{
   public static void main(String[] args)
   {
       Scanner sc = new Scanner(System.in);
       String nombre, disco, eleccion;
       ListaCantantesFamosos miLista = new ListaCantantesFamosos();
       
       //CantanteFamoso cantante1 = new CantanteFamoso("Artista1", "AlbumMasVendido1");
       //CantanteFamoso cantante2 = new CantanteFamoso("Artista2", "AlbumMasVendido2");
   
       miLista.addCantanteFamoso(new CantanteFamoso("Paul McCartney","Capitol"));
       miLista.addCantanteFamoso(new CantanteFamoso("Freddie Mercury","A Night at the Opera"));

       
       System.out.println("La lista inicial contiene los siguientes datos:");
       miLista.mostrarLista();
       System.out.println("Por favor introduzca los datos de otro cantante.");
       System.out.print("Nombre:");
       nombre = sc.nextLine();
       System.out.print("Disco con mas ventas:");
       disco = sc.nextLine();
       miLista.addCantanteFamoso(new CantanteFamoso(nombre,disco));
       System.out.println("La lista actualizada es la siguiente:");
       miLista.mostrarLista();
       
       System.out.println("¿Desea introducir los datos de otro cantante (s/n)?");
       eleccion = sc.nextLine();
       eleccion.toLowerCase(); // metodo de la clase String para que convierta su valor a minuscula
       while(!"n".equals(eleccion)) // Condicion: Mientras no ingresemos "n" se repetira el while
       {
           System.out.println("Por favor introduzca los datos de otro cantante.");
           System.out.print("Nombre:");
           nombre = sc.nextLine();
           System.out.print("Disco con mas ventas:");
           disco = sc.nextLine();
           miLista.addCantanteFamoso(new CantanteFamoso(nombre,disco));
           System.out.println("La lista actualizada es la siguiente:");
           miLista.mostrarLista();
           System.out.println("¿Desea introducir los datos de otro cantante (s/n)?");
           eleccion = sc.nextLine();
           eleccion.toLowerCase();
       }
       
       System.out.println("Su lista de cantantes ha quedao de la siguiente manera:");
       miLista.mostrarLista();
       // Siempre trato de poner esta ultima linea, para constatar de que el programa ha llegado
       // hasta el final
       System.out.println("El programa ha finalizado\n\n");   
   }
}
 

Saludos! :)

« Última modificación: 01 de Abril 2016, 11:46 por Mario R. Rancel »

SantiagoArg

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 10
    • Ver Perfil
Re:(CU00667B) Ejercicio - Tipo Iterator api Java
« Respuesta #1 en: 31 de Marzo 2016, 01:47 »
Si algún experimentado ve mi duda, puede ser que se trate de "Objetos anonimos" a lo que me refiero?
porque siguiendo el curso me encontre con ese tema y en un ejercicio que vi que subieron al foro lo explican de esa manera.

Gracias!

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Buenos días Santiago, tu código es correcto y cumple con lo que pedía el ejercicio

La clase test como has comentado se podría codificar de forma más breve, pero no te preocupes de eso ahora. A medida que vayas avanzando con el curso y cogiendo práctica podrás ir creando códigos más compactos.

En las líneas

Código: [Seleccionar]
       //CantanteFamoso cantante1 = new CantanteFamoso("Artista1", "AlbumMasVendido1");
       //CantanteFamoso cantante2 = new CantanteFamoso("Artista2", "AlbumMasVendido2");
   
       miLista.addCantanteFamoso(new CantanteFamoso("Paul McCartney","Capitol"));
       miLista.addCantanteFamoso(new CantanteFamoso("Freddie Mercury","A Night at the Opera"));

Ocurre lo que tú mismo has indicado: puedes añadir a la lista tanto objetos directamente (sin nombre, esto serían "objetos anónimos") como objetos creados previamente con un nombre.

A efectos de la lista es indistinto que lo hagas de una manera u otra. Dentro de la lista cada objeto es un objeto, da igual que lo hayas introducido partiendo de un objeto con nombre o de un objeto anónimo. Esto se comenta en el curso.

Saludos

 

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".