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: Dimitar Stefanov en 05 de Marzo 2016, 17:11
-
Buenas tardes.
A continuación os pongo una posible solución del ejercicio CU00667B del curso Java desde cero.
EJERCICIO
Crea una clase denominada ListaCantantesFamosos que disponga de un atributo ArrayList listaCantantesFamosos que contenga objetos de tipo CantanteFamoso. La clase debe tener un método que permita añadir objetos de tipo CantanteFamoso a la lista. Un objeto de tipo CantanteFamoso tendrá como atributos nombre (String) y discoConMasVentas (String), y los métodos para obtener y establecer los atributos. Crea una clase test con el método main que inicialice un objeto ListaCantantesFamosos y añade manualmente dos objetos de tipo CantanteFamoso a la la lista. Usando iterator muestra los nombres de cada cantante y su disco con más ventas por pantalla. Se debe pedir al usuario un nombre y disco con más ventas de otro cantante famoso, y una vez introducidos los datos mostrar la lista actualizada usando iterator. Una vez mostrada la lista actualizada, se debe dar opción a elegir entre volver a introducir los datos de otro cantante o salir del programa (se podrán introducir tantos datos de cantantes como se desee. Para ello usa un bucle while que dé opción a elegir al usuario).
Código de la clase "CantanteFamoso":
public class CantanteFamoso{
public String nombre;
public String discoConMasVentas;
public CantanteFamoso(String valor_nombre, String valor_discoConMasVentas){
nombre = valor_nombre;
discoConMasVentas = valor_discoConMasVentas;
}
public String getNombre(){return nombre;}
public String getDiscoConMasVentas(){return discoConMasVentas;}
public void mostrarCantantes(){
System.out.println("Cantante: "+nombre+"\nDisco más vendido: "+discoConMasVentas);
}
}
Código de la clase "ListaCantantesFamosos":
import java.util.ArrayList;
public class ListaCantantesFamosos{
private ArrayList<CantanteFamoso> listaCantantes;
public ListaCantantesFamosos(){
listaCantantes = new ArrayList<CantanteFamoso>();
}
public void añadirCantante(String valor_nombre, String valor_discoConMasVentas){
listaCantantes.add(new CantanteFamoso(valor_nombre, valor_discoConMasVentas));
}
public int getTamaño(){return listaCantantes.size();}
public CantanteFamoso obtenerInfo(int posicion){return listaCantantes.get(posicion);}
public ArrayList<CantanteFamoso> obtenerLista(){
return listaCantantes;
}
}
Código de la clase "Test":
import java.util.Scanner;
import java.util.Iterator;
public class Test{
private Scanner entradaScanner;
private ListaCantantesFamosos listaCantantes;
public static void main(String Args[]){
ListaCantantesFamosos listaCantantes = new ListaCantantesFamosos();
listaCantantes.añadirCantante("Michael Jackson","Thriller");
listaCantantes.añadirCantante("Luis Miguel","Mi jardín oculto");
Scanner entradaScanner = new Scanner(System.in);
String entradaTeclado03;
System.out.println("Cantantes en la lista:");
Iterator<CantanteFamoso> iteratorCantante = listaCantantes.obtenerLista().iterator();
while(iteratorCantante.hasNext()){
iteratorCantante.next().mostrarCantantes();
}
do{
System.out.print("Introduce otro cantante:");
String entradaTeclado01;
entradaTeclado01 = entradaScanner.nextLine();
System.out.print("Introduce su disco de más ventas:");
String entradaTeclado02;
entradaTeclado02 = entradaScanner.nextLine();
listaCantantes.añadirCantante(entradaTeclado01,entradaTeclado02);
iteratorCantante = listaCantantes.obtenerLista().iterator();
while(iteratorCantante.hasNext()){
iteratorCantante.next().mostrarCantantes();
}
System.out.print("Quieres introducir más cantantes? sí/no: ");
entradaTeclado03 = entradaScanner.nextLine();
}while(entradaTeclado03.equals("sí"));
if(entradaTeclado03.equals("sí")==false){
System.out.print("Gracias por usar nuestro programa.\nHasta pronto!");
}
}
}
PD: Para esta solución me ha servido de ayuda la resolución de barriway desde el siguiente hilo:
https://www.aprenderaprogramar.com/foros/index.php?topic=2889.0 (https://www.aprenderaprogramar.com/foros/index.php?topic=2889.0)
Gracias.
-
Hola!
Aunque no es obligatorio normalmente recomendamos tener un constructor sin atributos en todas las clases. En la clase CantanteFamoso te faltaría este constructor. También en esta clase te faltarían los métodos set (el ejercicio pide "métodos para obtener y establecer los atributos"). En general recomendamos siempre introducir métodos get y set en todas las clases.
En la clase CantanteFamoso el nombre de método mostrarCantantes no es coherente, el método no sirve para mostrar cantantes. Un nombre más adecuado sería mostrarDatosCantante o simplemente mostrarCantante pero hay que fijarse que es de un cantante, no de muchos.
En la clase ListaCantantesFamosos también te falta el método setListaCantantes. El método obtenerLista mejor llamarlo getListaCantantes, no es obligatorio, pero es un estándar que siguen todos los programadores. getTamaño ya hemos comentado que recomendamos getTamanno para evitar el uso de eñes
Saludos!
-
Hola, César.
No entendí muy bien de lo "un constructor sin atributos". ¿Te refieres a un constructor vacío? Algo así:
public CantanteFamoso(){
}
Es decir, el código de "CantanteFamoso" debería de quedar de la siguiente forma:
public class CantanteFamoso{
public String nombre;
public String discoConMasVentas;
public CantanteFamoso(){
//Nada que declarar
}
public CantanteFamoso(String valor_nombre, String valor_discoConMasVentas){
nombre = valor_nombre;
discoConMasVentas = valor_discoConMasVentas;
}
public void setNombre(String valor_nombre){
nombre = valor_nombre;
}
public void setDiscoConMasVentas(String valor_discoConMasVentas){
discoConMasVentas = valor_discoConMasVentas;
}
public String getNombre(){return nombre;}
public String getDiscoConMasVentas(){return discoConMasVentas;}
public void mostrarCantante(){
System.out.println("Cantante: "+nombre+"\nDisco más vendido: "+discoConMasVentas);
}
}
En el código de "ListaCantantesFamosos", agregué lo siguiente:
public void setListaCantantes(ArrayList<CantanteFamoso> nueva_listaCantantes){
listaCantantes = nueva_listaCantantes;
}
y por lo que el código se quedó:
import java.util.ArrayList;
public class ListaCantantesFamosos{
private ArrayList<CantanteFamoso> listaCantantes;
public ListaCantantesFamosos(){
listaCantantes = new ArrayList<CantanteFamoso>();
}
public void setListaCantantes(ArrayList<CantanteFamoso> nueva_listaCantantes){
listaCantantes = nueva_listaCantantes;
}
public void añadirCantante(String valor_nombre, String valor_discoConMasVentas){
listaCantantes.add(new CantanteFamoso(valor_nombre, valor_discoConMasVentas));
}
public int getTamaño(){return listaCantantes.size();}
public CantanteFamoso obtenerInfo(int posicion){return listaCantantes.get(posicion);}
public ArrayList<CantanteFamoso> obtenerLista(){
return listaCantantes;
}
}
No estoy muy seguro que si corregí bien los errores. ¿Podrás volver a mirártelo?, por favor.
Gracias
-
Hola!
Más bien me refería a un constructor tipo
public CantanteFamoso(){
nombre=""
discoConMasVentas=""
}
Con estos constructores permites crear objetos inicializados de una forma que tú has definido. Es habitual "" para cadenas, 0 para números y false para booleanos pero en ciertos casos podría ser de otra manera.
Las correcciones realizadas están ok, a seguir
Saludos!