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: SantiagoArg en 31 de Marzo 2016, 00:47

Título: Java diferencia entre introducir objetos en una lista con nombre o sin CU00667B
Publicado por: SantiagoArg en 31 de Marzo 2016, 00:47
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! :)

Título: Re:(CU00667B) Ejercicio - Tipo Iterator api Java
Publicado por: SantiagoArg 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!
Título: Re:Java diferencia entre introducir objetos en una lista con nombre o sin CU00667B
Publicado por: Mario R. Rancel en 01 de Abril 2016, 11:48
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