Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Bettu en 27 de Septiembre 2016, 15:59
-
Buenos días, Envío el ejercicio CU00667B del manual de programación Java desde cero resuelto.
Espero las criticas para mejorar mi programación en Java. Muchas gracias.
Clase CantanteFamoso
public class CantanteFamoso
{
private String nombre;
private String discoConMasVentas;
public CantanteFamoso()
{
nombre = "";
discoConMasVentas = "";
}
public CantanteFamoso(String valor_nombre, String valor_disco) {
nombre = valor_nombre;
discoConMasVentas = valor_disco;
}
public void setNombre (String valor_nombre) {
nombre = valor_nombre; }
public void setDiscoConMasVentas (String valor_disco) {
discoConMasVentas = valor_disco;}
public String getNombre() {return nombre;}
public String getDisco() {return discoConMasVentas;}
}
Clase EntradadeTecladoClase - Es la clase base que ya tengo definida para el ingreso desde teclado
import java.util.Scanner;
public class EntradaDeTecladoClase
{
// instance variables - replace the example below with your own
private String entradaTeclado;
/**
* Constructor for objects of class EntradaDeTecladoClase
*/
public EntradaDeTecladoClase()
{
// initialise instance variables
entradaTeclado = "";
pedirEntrada();
}
public void pedirEntrada()
{
// put your code here
Scanner entradaScanner = new Scanner(System.in);
entradaTeclado = entradaScanner.nextLine();
}
public String getEntrada(){ return entradaTeclado;}
}
Clase ListaCantantesFamososyDisco
import java.util.ArrayList;
import java.util.Iterator;
public class ListaCantantesFamososyDisco
{
private String nombre;
private ArrayList<CantanteFamoso>listaDeCantantesFamosos;
private CantanteFamoso objetoCantante;
public ListaCantantesFamososyDisco(String valor_nombre) {
nombre = valor_nombre;
listaDeCantantesFamosos = new ArrayList<CantanteFamoso>();
}
public void addCantanteFamoso (String valor_nombre, String valor_disco) {
objetoCantante = new CantanteFamoso(valor_nombre, valor_disco);
listaDeCantantesFamosos.add(objetoCantante);
}
public void muestraCantantesyDiscos () {
Iterator <CantanteFamoso> it = listaDeCantantesFamosos.iterator();
CantanteFamoso tmpCantante = null;
if (it.hasNext()== true) {
System.out.println("La lista actualizada contiene los siguientes datos:");
while (it.hasNext()){
tmpCantante = it.next();
System.out.println("Cantante: " + tmpCantante.getNombre()+" Disco con más ventas: "+tmpCantante.getDisco());
}
System.out.println("");
}
}
}
Clase TestListaCantantesFamososyDiscos
/**
* Write a description of class TestListaCantantesFamososyDiscos here.
* Autor: Bettu
* 27/09/2/16
*/
public class TestListaCantantesFamososyDiscos
{
public static void main (String[] args)
{
String compara;
System.out.println("Lista de Cantantes Famosos y sus Discos");
ListaCantantesFamososyDisco lista1 = new ListaCantantesFamososyDisco("Nombre Cantante Famosos");
lista1.addCantanteFamoso( "Madonna","All I want is you");
lista1.addCantanteFamoso("Jorge Negrete","Jalisco");
while (true) {
System.out.println("Por favor introduzca los datos de otro cantante:");
System.out.print("Nombre: ");
EntradaDeTecladoClase nombre1 = new EntradaDeTecladoClase();
System.out.print("Disco con más ventas: ");
EntradaDeTecladoClase disco1 = new EntradaDeTecladoClase();
lista1.addCantanteFamoso( nombre1.getEntrada(),disco1.getEntrada());
lista1.muestraCantantesyDiscos ();
System.out.println("Desea introducir los datos de otro cantante (s/n):");
EntradaDeTecladoClase sigue = new EntradaDeTecladoClase();
compara = sigue.getEntrada();
if (compara.substring(0,1).equals("s") || compara.substring(0,1).equals("S") ){
// continua pidiendo
}
else { break; }
}
System.out.println("Fin Lista Cantantes Famosos");
}
}
-
Hola Bettu
Hay algo que no se entiende. En la clase ListaCantantesFamososyDisco
¿Por qué le has puesto el nombre yDisco?
¿Por qué tienes un atributo en esa clase que es un CantanteFamoso:
public class ListaCantantesFamososyDisco
{
private String nombre;
private ArrayList<CantanteFamoso>listaDeCantantesFamosos;
private CantanteFamoso objetoCantante;
Tampoco está bien planteado esto: public void addCantanteFamoso (String valor_nombre, String valor_disco)
Para añadir un cantante debería recibirse un objeto cantante. Piensa que en Java hay que trabajar con objetos!
Fíjate como modelo de solución en el ejercicio resuelto que está disponible en https://www.aprenderaprogramar.com/foros/index.php?topic=2889.0, luego inténtalo de nuevo corrigiendo los errores
Saludos
-
Hola, tuve que dar una parada en el curso por otros motivos, además de volver a ver todo de nuevo para fijar los conocimientos en POO, ya que toda mi vida utilicé la programación estructurada, no es fácil cambiar de forma de pensar, pero con mi esfuerzo y la gran ayuda de todos los colabores que revisan los trabajos espero conseguirlo.
Fue muy importante ver de nuevo el ejercicio que me has pasado para analizar. Solo me ha quedado una duda, en la definición de la clase CantanteFamoso, cual es el objetivo del constructor: public CantanteFamoso(CantanteFamoso cantanteFamoso).
De nuevo muchas gracias por vuestra paciencia y colaboración!!
-
Hola Bettu, el objetivo de ese constructor es poder crear un nuevo objeto a partir de otro objeto ya existente (que se recibe como parámetro).
En Java todo gira en torno a objetos. Cuesta un tiempo amoldarse a esta forma de pensar, más si se viene de la programación estructurada pura, pero a la larga se consigue.
Saludos