Autor Tema: Tipo Iterador, iterator en ArrayList, Sintaxis Java ejercicio resuelto CU00667B  (Leído 419 veces)

nengue

  • Sin experiencia
  • *
  • Mensajes: 9
    • Ver Perfil
Buenas, me gustaria que me den su opinión sobre esta propuesta de solución para el ejercicio CU00667B del tutorial de programación Java. Me encuentro en formación y si bien el ejercicio creo que lo he resuelto bien me gustaria que me den su opinion pero en primer medida si detectan errores ya sea de sintaxis o de otro tipo ,que me los indiquen para corregir y mejorar, en orden comenzando con la clase main, y luego el código de las siguientes dos clases.Desde ya muschas gracias!


Código: [Seleccionar]
import java.util.Scanner;
/**
 * clase main de prueba
 */

public class test_ListaCantantesFamosos
{
    public static void main(String[] args)
    {
        ListaCantantesFamosos lista=new ListaCantantesFamosos();
        String opcion = "s";
        Scanner entrada = new Scanner(System.in);
       
        System.out.println("Esta es la lista Inicial");
        lista.mostrarListaCantantes();
       
         while(opcion.charAt(0)!='n')
        {
         lista.addCantanteFamoso();
         System.out.println("\rLa lista actualizada es" );
         lista.mostrarListaCantantes();
         System.out.println("Desea continuar? s/n ");
         opcion = entrada.nextLine();
        }
       
    }
   
}
       


Clase ListaCantantesFamosos

Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Iterator;
/**
 * Esta clase contiene una lista con todos los cantantes famosos
 * cada cantante famoso es una instancia de CantanteFamoso
 */

public class ListaCantantesFamosos
{
    private ArrayList<CantanteFamoso> lista ;

    public ListaCantantesFamosos()
    {
        lista = new ArrayList<CantanteFamoso>();
        lista.add(new CantanteFamoso("Madonna","All i wants is you"));
        lista.add(new CantanteFamoso("Jorge Negrete","Jalisco"));
    }

    public void addCantanteFamoso()
    {
        lista.add(new CantanteFamoso());
    }

    public void mostrarListaCantantes()
    {
        Iterator<CantanteFamoso> dato= lista.iterator();
        while (dato.hasNext())
        {
            CantanteFamoso extraido = dato.next();
            System.out.println("*Artista: " + extraido.getNombreCantante() + " \tDisco mas vendido : " + extraido.getDiscoMasVendido()) ;
        }
    }

}


Clase CantanteFamoso

Código: [Seleccionar]
import java.util.Scanner;
/**
 * esta clase contiene a los objetos Cantantefamoso
 * compuesto por un nombre de cantante y el nombre
 * del disco mas vendido
 */

public class CantanteFamoso{

    private String nombreCantante;
    private String discoMasVendido;

    public CantanteFamoso()
    {
        setNombreCantante();
        setDiscoMasVendido();
    }
   
    public CantanteFamoso(String nombre,String disco)
    {
        nombreCantante=nombre;
        discoMasVendido = disco;
    }

    public void setNombreCantante()
    {
        Scanner entrada = new Scanner(System.in);
        System.out.println("Ingrese el nombre del cantante");
        nombreCantante = entrada.nextLine();
    }

    public void setDiscoMasVendido()
    {
        Scanner entrada = new Scanner (System.in);
        System.out.println("Ingrese el nombre del Disco mas vendido de " + nombreCantante);
        discoMasVendido = entrada.nextLine();
    }

    public String getNombreCantante()
    {
        return nombreCantante;
    }

    public String getDiscoMasVendido()
    {
        return discoMasVendido;
    }
}
« Última modificación: 01 de Diciembre 2020, 19:55 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2049
    • Ver Perfil
Hola, he revisado el ejercicio y aunque el código "funciona" hay varias cosas que habría que corregir.

- En la clase CantanteFamoso hay un comentario que es << * esta clase contiene a los objetos Cantantefamoso >>
Sería más correcto decir << * esta clase define a los objetos Cantantefamoso >> o bien << * esta clase representa a los objetos Cantantefamoso >> ya que la clase no contiene objetos, los define.

- Lo mismo ocurre en la clase ListaCantantesFamosos

- En la clase CantanteFamoso los métodos set no se ajustan a la convención que siguen los miles de programadores Java. Un método set se usa para establecer un atributo a partir de un parámetro o varios parámetros recibidos. Pero aquí los métodos set no reciben parámetros, sino que piden al usuario que introduzca datos por teclado. Esto no está bien planteado desde el punto de vista de la programación orientada a objetos, porque no es responsabilidad de un método set interactuar con el usuario.

- En la clase ListaCantantesFamosos se añaden dos cantantes en el constructor. Esto no debe hacerse, excepto si el ejercicio lo pide explícitamente. En este ejercicio no se pide, luego no es correcto. Esto implicaría que todas las listas se inicializarían con las mismas dos canciones iniciales.

En el hilo https://aprenderaprogramar.com/foros/index.php?topic=2889.0 puede verse una solución correcta con una buena distribución de responsabilidades y ordenación del código. Recomiendo revisarlo. Si te quedan dudas consulta. Saludos.

nengue

  • Sin experiencia
  • *
  • Mensajes: 9
    • Ver Perfil
Alex, muchas gracias por responder..y por tomarte el tiempo de revisar el codigo

Citar

- En la clase CantanteFamoso hay un comentario que es << * esta clase contiene a los objetos Cantantefamoso >>
Sería más correcto decir << * esta clase define a los objetos Cantantefamoso >> o bien << * esta clase representa a los objetos Cantantefamoso >> ya que la clase no contiene objetos, los define.

- Lo mismo ocurre en la clase ListaCantantesFamosos


Excelente, es bien cierto, la clase solo define, no contiene

Citar
En la clase CantanteFamoso los métodos set no se ajustan a la convención que siguen los miles de programadores Java. Un método set se usa para establecer un atributo a partir de un parámetro o varios parámetros recibidos. Pero aquí los métodos set no reciben parámetros, sino que piden al usuario que introduzca datos por teclado. Esto no está bien planteado desde el punto de vista de la programación orientada a objetos, porque no es responsabilidad de un método set interactuar con el usuario.


...Bien aunque funcione, eso esta mal..gracias por la corrección,Setters siempre con argumentos entonces

Citar
En la clase ListaCantantesFamosos se añaden dos cantantes en el constructor. Esto no debe hacerse, excepto si el ejercicio lo pide explícitamente. En este ejercicio no se pide, luego no es correcto. Esto implicaría que todas las listas se inicializarían con las mismas dos canciones iniciales.


bueno en el ejemplo de como debia mostrarse , iniciaba con dos cantantes precargados,la l"ista inicial", por eso en el constructor se añaden dos canntantes.de todas maneras , excelente tu respuesta y valoro muchisimo los comentarios!me han sido de muchisima utilidad,gracias por tu tiempo y tu respuesta!

« Última modificación: 01 de Diciembre 2020, 23:08 por nengue »

 

Esto es un laboratorio de ideas...
Aprender a programar

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