Autor Tema: Java ejercicio Iterator crear una clase y una lista de elementos Array CU00667B  (Leído 2844 veces)

Bettu

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 28
    • Ver Perfil
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

Código: [Seleccionar]
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

Código: [Seleccionar]
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

Código: [Seleccionar]
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

Código: [Seleccionar]
/**
 * 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");
    }

}

« Última modificación: 01 de Octubre 2016, 12:41 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
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:

Código: [Seleccionar]
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

Bettu

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 28
    • Ver Perfil
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!!

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
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

 

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