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
-
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
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
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
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! :)
-
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!
-
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
//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