Autor Tema: Java ejercicio resuelto con ArrayList para crear una lista de cantantes CU00667B  (Leído 10281 veces)

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Citar
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).


Clase para crear teclado

Código: [Seleccionar]
package ejercicioscu00667b;

import java.util.Scanner;

public class EntradaDeTeclado {

    private String entradaTeclado;
    Scanner sc = new Scanner(System.in);

    public EntradaDeTeclado() {
        entradaTeclado = "";
    }

    public String AgregarCantante() {
        entradaTeclado = sc.nextLine();
        return entradaTeclado;
    }
    public String getEntrada() {
        return entradaTeclado;
    }

}


Clase para Crear cantante y su disco

Código: [Seleccionar]
package ejercicioscu00667b;

public class CantanteFamoso {

    private String nombre;
    private String discoMasVendido;

    public CantanteFamoso() {
        nombre = "";
        discoMasVendido = "";
    }

    public CantanteFamoso(String nombre, String discoMasVendido) {
        this.nombre = nombre;
        this.discoMasVendido = discoMasVendido;
    }

    public String getDiscoConMasVentas() {
        return discoMasVendido;
    }

    public String getNombre() {
        return nombre;
    }
}


Clase para listar y agregar cantante y su disco

Código: [Seleccionar]
package ejercicioscu00667b;

import java.util.ArrayList;
import java.util.Iterator;

public class ListaCantantesFamosos {

    ArrayList<CantanteFamoso> cantantes;

    public ListaCantantesFamosos() {
        cantantes = new <CantanteFamoso> ArrayList();
    }

    public void AgregarCantanteFamoso(CantanteFamoso Cantante) {
        cantantes.add(Cantante);
    }

    public void listarCantanteFamoso() {
        CantanteFamoso cantante;
        Iterator<CantanteFamoso> continuar = cantantes.iterator();
        while (continuar.hasNext()) {
            cantante = continuar.next();
            System.out.print("Cantante: " + cantante.getNombre());
            System.out.println("        Discos con mas ventas: " + cantante.getDiscoConMasVentas());
        }
    }

}


Clase principal main

Código: [Seleccionar]
package ejercicioscu00667b;

import java.util.Scanner;

public class EjerciciosCu00667B {

    public static void main(String[] args) {

        String cantante, disco;
        ListaCantantesFamosos listacantate = new ListaCantantesFamosos();
        EntradaDeTeclado entrada = new EntradaDeTeclado();

        CantanteFamoso cantante1 = new CantanteFamoso("Marcos Antonio", "Navidad sin ti");//los datos no son reales
        CantanteFamoso cantante2 = new CantanteFamoso("Enrique Iglesia", "Si tu te va");
        listacantate.AgregarCantanteFamoso(cantante1);
        listacantate.AgregarCantanteFamoso(cantante2);

        System.out.println("La lista contiene los siguientes datos: ");
        listacantate.listarCantanteFamoso();
        String continuar = new String();
        Scanner sc = new Scanner(System.in);

        do {
            System.out.println("Ingrese nombre de un cantante: ");
            cantante = entrada.AgregarCantante();
            System.out.println("Ingrese su disco mas vendido: ");
            disco = entrada.AgregarCantante();
            listacantate.AgregarCantanteFamoso(new CantanteFamoso(cantante, disco));
            System.out.println("La lista contiene los siguientes datos: ");
            List.listarCantanteFamoso();
            System.out.println("¿Deseas agregar otro cantante y su disco (S/N)?");
            continuar = sc.nextLine();
        } while (continuar.equalsIgnoreCase("s"));

    }

}


Una pregunta, cómo se puede hacer para cargar directamente los datos de los cantantes inicialmente sin usar un new cantante. Es decir como los ejercicios anteriores ejemplo cantante.add("Marcos antonio"); porque este tiene dos datos que el nombre y el disco y no funciona cuando quiere poner así por ejemplo cantante.add("Marcos antonio", "navidad sin ti"); como podía hacer eso.
« Última modificación: 05 de Junio 2015, 14:52 por Alex Rodríguez »

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Re:Ejercicios Cu00667B de java
« Respuesta #1 en: 05 de Junio 2015, 13:49 »
Hola Ramón:

He estado revisando tu código:

Respecto de la clase EntradaDeTeclado. Funcionalmente funciona muy bien, si embargo no considero que esté bien nombrada. La renombraría con algo más significativo de lo que representa la clase, por ejemplo GestionadorEntradasTeclado, ya que eso es lo que esta clase es.
Lo mismo que modificaría sus dos métodos combinándolos en uno solo que al llamarlo, nos devolviera el atributo tipo String que fuese el valor que se ha ingresado por teclado. A ese método lo llamaria algo así como recogerPalabra(), ya que realmente es lo que hace.

Recuerda que la idea en POO es también crear códigos que luego podamos reutilizar. Entonces con esta clase EntradaDeTeclado con un método recogerPalabra() tendrás un código que podrás seguir utilizando en otros proyectos y no solo estará limitado a este ejercicio.

Sobre cómo renombrar las clases te cito textual lo que en otro hilo sugirió Mario R. Rancel (el Administrador), y considero que es muy esclarecedor:

Citar
Te recomendaría que empieces a acostumbrarte a pensar en cómo nombrar adecuadamente a las clases. El nombre normalmente debe ser descriptivo, en singular, y reflejar lo que representa o hace la clase. En el caso de que la clase represente algo de la vida real será "Rueda" o "Vehiculo", etc. En el caso de que represente algo no real podrá ser "Pensamiento" o "Duda" o "Reunion". Cuando las clases están destinadas más que a representar a realizar procesos, como es este caso, los nombres suelen ser del tipo -or, por ejemplo CombinadorInicialesPalabras, Exponenciador, ConstructorDeMultillaves, ExtractorDeAtributos, ReductorDeFlujo, etc.

Respecto de la clase CantanteFamoso:
Me ha parecido muy bien codificar dos posibilidades de Constructor: con y sin parámetros.
Muy bien los métoso get. Te han faltado escribir los métodos set.

Respecto de la clase ListaCantantesFamosos:
Está muy bien realizada la clase, aunque fíjate que te sale un Warning al compilarla. Es por cómo has codificado el Constructor, está mal inicializado el ArrayList. Analiza y escribe el constructor de la siguiente manera:

Código: [Seleccionar]
    public ListaCantantesFamosos() {
        cantantes = new ArrayList<CantanteFamoso>();
    }

El atributo del método AgregarCantanteFamoso debería ir con minúscula para respetar la convención de minúsculas y mayúsculas al nombrar atributos.

Muy bien realizado el método listarCantanteFamoso().

Respecto de la clase EjerciciosCu00667B:

Está clase no complia, pero está muy bien realizada.
¿Dónde está el problema que hace que no compile? No compila porque deberías cambiar la línea:

Código: [Seleccionar]
List.listarCantanteFamoso();por:
Código: [Seleccionar]
listacantate.listarCantanteFamoso();
Sugeriría además que renombraras el atributo listacantate por listaCantante para respetar la convención de minúsculas y mayúsculas al nombrar atributos.

Otra sugerencia: a la declaración del atributo tipo String

Código: [Seleccionar]
String continuar = new String();
simplemente la deberías realizar como lo hemos hecho siempre:

Código: [Seleccionar]
String continuar;

A seguir adelante!

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Gracia por la recomendación el código funciona y compilaba bien el tema es que yo modifique y no prove mas después y no cambie todo los nombre en donde dice list yo cambie por lista y no cambie todo y estoy aprendiendo a nombrar de apoco a las clase y a los métodos como debe ser ahora desde que seguí este curso porque yo estaba acostumbrado a llamarlo como quiero pero estoy mejorando gracia al foro y al equipo de aprenderaprogramar

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Hice la modificación según me indicaste
Clase para gestionar teclado
Código: [Seleccionar]
package ejercicioscu00667b;

import java.util.Scanner;

public class GestionadorEntradasTeclado {

    private String entradaTeclado;
    Scanner sc = new Scanner(System.in);

    public GestionadorEntradasTeclado() {
        entradaTeclado = "";
    }

    public String recogerPalabra() {
        entradaTeclado = sc.nextLine();
        return entradaTeclado;
    }
   

}
clase para crear cantante y su disco
Código: [Seleccionar]
package ejercicioscu00667b;

public class CantanteFamoso {

    private String nombre;
    private String discoMasVendido;

    public CantanteFamoso() {
        nombre = "";
        discoMasVendido = "";
    }

    public CantanteFamoso(String nombre, String discoMasVendido) {
        this.nombre = nombre;
        this.discoMasVendido = discoMasVendido;
    }

    public String getDiscoConMasVentas() {
        return discoMasVendido;
    }

    public String getNombre() {
        return nombre;
    }
}
clase para agregar y  listar cantante
Código: [Seleccionar]
package ejercicioscu00667b;

import java.util.ArrayList;
import java.util.Iterator;

public class ListaCantantesFamosos {

    ArrayList<CantanteFamoso> cantantes;

    public ListaCantantesFamosos() {
        cantantes = new <CantanteFamoso> ArrayList();
    }

    public void agregarCantanteFamoso(CantanteFamoso Cantante) {
        cantantes.add(Cantante);
    }

    public void listarCantanteFamoso() {
        CantanteFamoso cantante;
        Iterator<CantanteFamoso> continuar = cantantes.iterator();
        while (continuar.hasNext()) {
            cantante = continuar.next();
            System.out.print("Cantante: " + cantante.getNombre());
            System.out.println("        Discos con mas ventas: " + cantante.getDiscoConMasVentas());
        }
    }

}
clase principal main
Código: [Seleccionar]
package ejercicioscu00667b;

import java.util.Scanner;

public class EjerciciosCu00667B {

    public static void main(String[] args) {

        String cantante, disco;
        ListaCantantesFamosos listaCantate = new ListaCantantesFamosos();
        GestionadorEntradasTeclado entrada = new GestionadorEntradasTeclado();

        CantanteFamoso cantante1 = new CantanteFamoso("Marcos Antonio", "Navidad sin ti");//los datos no son reales
        CantanteFamoso cantante2 = new CantanteFamoso("Enrique Iglesia", "Si tu te va");
        listaCantate.agregarCantanteFamoso(cantante1);
        listaCantate.agregarCantanteFamoso(cantante2);

        System.out.println("La lista contiene los siguientes datos: ");
        listaCantate.listarCantanteFamoso();
        String continuar;
        Scanner sc = new Scanner(System.in);

        do {
            System.out.println("Ingrese nombre de un cantante: ");
            cantante = entrada.recogerPalabra();
            System.out.println("Ingrese su disco mas vendido: ");
            disco = entrada.recogerPalabra();
            listaCantate.agregarCantanteFamoso(new CantanteFamoso(cantante, disco));
            System.out.println("La lista contiene los siguientes datos: ");
            listaCantate.listarCantanteFamoso();
            System.out.println("¿Deseas agregar otro cantante y su disco (S/N)?");
            continuar = sc.nextLine();
        } while (continuar.equalsIgnoreCase("s"));

    }

}

 

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