Autor Tema: Solucion Ejercicio CU00667B - Tipo Iterator api Java ejemplo recorrer coleccion  (Leído 3617 veces)

jotase1507

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 38
    • Ver Perfil
Buenas tardes, envio mi codigo para la revision :), Gracias de antemano.

Clase CantantesFamosos
Código: [Seleccionar]
import java.util.Scanner;

public class CantantesFamosos {
   
    String nombre ="", discoConMasVentas="";
   
    public CantantesFamosos(String valorNombre, String valorDiscoConMasVentas) {
        nombre = valorNombre;
        discoConMasVentas = valorDiscoConMasVentas;
    }
   
    public CantantesFamosos (){ }
       
    public String getNombre(){
        return nombre;
    }
   
    public void setNombre(){
        Scanner entradaEscaner = new Scanner (System.in);
        nombre = entradaEscaner.nextLine ();
    }
   
    public String getdiscoConMasVentas(){
        return discoConMasVentas;
    }
   
    public void setdiscoConMasVentas(){
        Scanner entradaEscanner = new Scanner (System.in);
        discoConMasVentas = entradaEscanner.nextLine();
    }
}

Clase ListaCantantesFamosos2
Código: [Seleccionar]
import java.util.ArrayList;

public class ListaCantantesFamosos2 {
   
    CantantesFamosos objetoCantante;
    ArrayList <CantantesFamosos> listaObjetosCantantesFamosos;
   
    public ListaCantantesFamosos2 () {
        listaObjetosCantantesFamosos = new ArrayList<CantantesFamosos>();
    }
   
    public void addNombre (CantantesFamosos valorObjeto) {
        listaObjetosCantantesFamosos.add(valorObjeto);
    }
}

Clase EntradaDeTeclado
Código: [Seleccionar]
import java.util.Scanner;

public class EntradaDeTeclado {
    private String entradaTeclado;
 
    public EntradaDeTeclado ()  {
        entradaTeclado="";
        pedirEntrada();
    }
 
    public void pedirEntrada ()  {   
        Scanner entradaEscaner = new Scanner (System.in);
        entradaTeclado = entradaEscaner.nextLine ();     
    }
 
    public String getEntrada () {
        return entradaTeclado;
    }
}

Clase Main
Código: [Seleccionar]
import java.util.*;
public class Prueba {
    //Ejercicio 67
    public static void main (String [] args) {
        System.out.println("Inicia el programa\n");
       
        ListaCantantesFamosos2 lista = new ListaCantantesFamosos2();
       
        CantantesFamosos cantante1 = new CantantesFamosos("Madonna","All I want is you");
        CantantesFamosos cantante2 = new CantantesFamosos("Jorge Negrete","Jalisco");
       
        lista.addNombre(cantante1);
        lista.addNombre(cantante2);
       
        System.out.println("La lista inicial contiene los siguientes datos:");
       
        for (CantantesFamosos cantante: lista.listaObjetosCantantesFamosos) {
                System.out.println("Cantante: "+cantante.getNombre()+"."+" / "+
                                   "Disco Con Mas Ventas: "+cantante.getdiscoConMasVentas());
        }
       
        int i = 3;
       
        while (lista.listaObjetosCantantesFamosos.size()<i) {
            System.out.println("\nPor favor introduzca los datos de otro cantante.");
            CantantesFamosos cantante = new CantantesFamosos();
            System.out.println("Nombre: ");
            cantante.setNombre();
            System.out.println("Disco con más ventas: ");
            cantante.setdiscoConMasVentas();
            lista.addNombre(cantante);
            System.out.println("La lista actualizada contiene los siguientes datos:");
            for (Iterator<CantantesFamosos> it = lista.listaObjetosCantantesFamosos.iterator(); it.hasNext();) {
                CantantesFamosos objeto = it.next();
                System.out.println( "Cantante: "+objeto.getNombre()+"."+"   "+
                                    "Disco Con Mas Ventas: "+objeto.getdiscoConMasVentas()+".");
            }
            System.out.println("¿Desea introducir los datos de otro cantante (s/n)?");
            EntradaDeTeclado entrada = new EntradaDeTeclado();
            String yesOrNo = entrada.getEntrada();
            if (yesOrNo.equalsIgnoreCase("n")){
            } else {
                i++;
            }
        }
    }
}
« Última modificación: 10 de Febrero 2015, 08:41 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:Solucion Ejercicio CU00667B - Tipo Iterator api Java.
« Respuesta #1 en: 09 de Febrero 2015, 16:41 »
Hola jotase

Has creado un ejercicio muy bueno. OK.

Con variaciones dignas de destacar: Los setters de CantantesFamosos no reciben parámetros. Los solicitan ellos con el apoyo de la clase Scanner.

----
Quiero apuntarte pero detalles que sirven para mejorar el código:
Verás que es poca cosa.
La clase CantantesFamosos manipula atributos de un cantante cada vez.
Así su nombre sería más coherente: CantanteFamoso.
Si que es correcto en la clase ListaCantantesFamosos2 que incluya el plural pues manipula una lista de varios cantantes famosos.

Continúo con nimiedades que no afectan a la consistencia del código:
En la clase CantantesFamosos.
Primero los atributos deben declararse de tipo private (por convención).
Y los nombres de los métodos del atributo discoConMasVentas deberían ser:
getDiscoConMasVentas y setDiscoConMasVentas. De esta forma verás que es más fácil de leer los nombre compuestos por varias palabras.

En este punto, hablando de la clase CantanteFamoso o CantantesFamosos, quiero que no descartes el uso de parámetros para los métodos set.
En algunas ocasiones los valores de los atributos no se escriben por teclado. Se toman de otros objetos con sus métodos get y se envían a nuestros objetos con el propio método set.
Ejem. setNombre(cantanteAntiguo.getNombre());
----------
En la clase ListaCantantesFamosos2 has definido el atributo objetoCantante que no usas en ningún momento y del que no creaste los métodos get ni set.
Supongo que se ha quedado ahí después de una línea de codificación que has abandonado.

También has creado el método addNombre.
Mira que sería más correcto addCantante o addCantanteFamoso pues añadimos un objeto que tiene nombre y disco con más ventas, no solo un nombre.

-------------
En la clase Prueba

Las dos líneas siguientes:
        CantantesFamosos cantante1 = new CantantesFamosos("Madonna","All I want is you");
        lista.addNombre(cantante1);
 podrían sustituirse por una línea:
        lista.addNombre(new CantantesFamosos("Madonna","All I want is you"));

La rutina para mostrar los cantantes de la lista está repetida en el main.
Siempre nos interesará evitar duplicidad del código (si hay que modificarlo, lo hacemos solo una vez).
Esta rutina debería colocarse en el código de la clase ListaCantantesFamosos2, pues esta lista es el atributo de dicha clase y debería ser ella quien muestre esa información.
(Igual que un método get está dentro de la clase del atributo que vamos a mostrar)
Luego, desde el main solo tenemos que llamar a ese método (mostrar la lista de cantantes) todas las veces que nos convenga.

Saludos y adelante.

jotase1507

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 38
    • Ver Perfil
Re:Solucion Ejercicio CU00667B - Tipo Iterator api Java.
« Respuesta #2 en: 09 de Febrero 2015, 18:55 »
Primero que nada, gracias por responder, aprecio el tiempo que te tomas en hacer las anotaciones de mi codificacion y asi mismo eso me impulsa a seguir intentando mejorar.

Solo comentarte que hice las pequeñas correcciones en mi codigo, nuevamente gracias por todo, estoy aprendiendo demasiado aqui, sin duda recomendare la pagina.

Algo que no me queda claro del todo es este parrafo
Citar
En algunas ocasiones los valores de los atributos no se escriben por teclado. Se toman de otros objetos con sus métodos get y se envían a nuestros objetos con el propio método set.
Ejem. setNombre(cantanteAntiguo.getNombre());
Me intriga el proceder de este codigo y en que escenario podria emplearse. Esto se ve mas adelante en algun momento o es un conocimiento adquirido en base a tu propia experiencia?

Saludos y bendiciones

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:Solucion Ejercicio CU00667B - Tipo Iterator api Java.
« Respuesta #3 en: 09 de Febrero 2015, 23:38 »
Hola jotase
El código
    setNombre(cantanteAntiguo.getNombre());
seria una forma de usar el setter que requiere un parámetro de tipo String
    public void setNombre(String nuevoNombre) {
        nombre = nuevoNombre;
    }
Otras formas de usar este setter serían:
    setNombre("Miguel Bose");
   
    String tmpNombre = cantante25.getNombre();
    setNombre(tmpNombre);

Piensa que en los programas que se usan a diario, el usuario antes de salir de ellos, guarda los datos en archivos de disco para no perder la información.
Y al día siguiente recupera esa información leyendo los archivos guardados en el disco (y esa información no hay que teclearla de nuevo)
Al leer esa información del disco, se asigna a variables y a listas de objetos para continuar trabajando usando para ello los métodos adecuados setters, getters u otros métodos específicos.

Así pues, tu clase CantanteFamoso para ser versátil le vendría bien tener un setter que recibe un parámetro además del setter sin parámetro que pide el dato al usuario.
Y cuando tu programa necesita crear un cantante nuevo, usa el setter que pide el dato por teclado. Y cuando esta información viaja dentro del programa de un lado a otro se usa el setter con parámetro (que puede ser un getter que devuelve un String o una variable de tipo String, o cualquier método ideado por nosotros que devuelve un String con el nombre de un cantante famoso.)

Los métodos get y set se usan en los programas de Java cuando son necesarios.

No existe una lección específica para hablar de un setter que recibe un getter como parámetro. Esto tampoco es ninguna excepción.
Un parámetro de tipo String como decía antes puede ser un parámetro sin nombre ("Miguel Bose"), una variable (tmpNombre), un getter (cantante25.getNombre()), u otro método que hayamos creado (dameNombreCantante(elemento35)).

Y en cuanto a mi, tengo solo un poco de experiencia. Cada día se encuentran cosas nuevas que uno va incluyendo en su bagaje.
Y en mi caso un porcentaje muy alto lo he adquirido en este portal

Espero haber contestado la mayor parte de lo que querías saber.


Saludos

jotase1507

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 38
    • Ver Perfil
Re:Solucion Ejercicio CU00667B - Tipo Iterator api Java.
« Respuesta #4 en: 10 de Febrero 2015, 04:57 »
Gracias por la aclaracion toni_apr, me quedo mas claro el punto :)

 

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