Autor Tema: Ejemplo iterator api java con ArrayList Ejercicio CU00667B del tutorial  (Leído 3736 veces)

rogergcc

  • Sin experiencia
  • *
  • Mensajes: 17
    • 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 CantanteFamoso con los datos cantante y disco con mas ventas
Código: [Seleccionar]
class CantanteFamoso {
    private String nombre;
    private String discoConMasVentas;

    public CantanteFamoso() {
        this.nombre = "";
        this.discoConMasVentas = "";
    }

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

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the discoConMasVentas
     */
    public String getDiscoConMasVentas() {
        return discoConMasVentas;
    }

    /**
     * @param discoConMasVentas the discoConMasVentas to set
     */
    public void setDiscoConMasVentas(String discoConMasVentas) {
        this.discoConMasVentas = discoConMasVentas;
    }
   
}

Clase ListaCantantesFamosos con un Arraylist que almacena solo CantanteFamoso
Código: [Seleccionar]
public class ListaCantantesFamosos {
    private ArrayList<CantanteFamoso>listaCantantesFamosos;

    public ListaCantantesFamosos() {
        this.listaCantantesFamosos = new <CantanteFamoso>ArrayList();
       
    }
   
    //método que permita añadir objetos de tipo CantanteFamoso a la lista
    public void añadirCantantesFamosos(){
        CantanteFamoso ca=new CantanteFamoso();
        listaCantantesFamosos.add(ca);
    }
   
    public void listarCantantesFamosos(){
        CantanteFamoso c;
        Iterator<CantanteFamoso>it=listaCantantesFamosos.iterator();
        while (it.hasNext()) {
            c = it.next();
            System.out.println("Cantante: "+ c.getNombre());
            System.out.println("Disco con más ventas:"+c.getDiscoConMasVentas());
        }
    }
    /**
     * @return the listaCantantesFamosos
     */
    public ArrayList<CantanteFamoso> getListaCantantesFamosos() {
        return listaCantantesFamosos;
    }

    /**
     * @param listaCantantesFamosos the listaCantantesFamosos to set
     */
    public void setListaCantantesFamosos(ArrayList<CantanteFamoso> listaCantantesFamosos) {
        this.listaCantantesFamosos = listaCantantesFamosos;
    }
    public void setCantanteFamoso(CantanteFamoso Cantante){
        listaCantantesFamosos.add(Cantante);
    }
}

Clase EntradaTeclado para la entrada de datos por el usuario
Código: [Seleccionar]
import java.util.Scanner;

/**
 *
 * @author don_h_000
 */
public class EntradaTeclado {
    private String entradaTeclado;

    public EntradaTeclado() {
        Scanner sc= new Scanner(System.in);
       
        this.entradaTeclado = sc.nextLine();
    }

    /**
     * @return the entradaTeclado
     */
    public String getEntradaTeclado() {
        return entradaTeclado;
    }

    /**
     * @param entradaTeclado the entradaTeclado to set
     */
    public void setEntradaTeclado(String entradaTeclado) {
        this.entradaTeclado = entradaTeclado;
    }
   
}

Clase Test con el método main
Código: [Seleccionar]
import java.util.Scanner;

/**
 *
 * @author don_h_000
 */
public class test {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        ListaCantantesFamosos listaDeCantantes1=new ListaCantantesFamosos();
       
        String opcion=new String();
        Scanner sc =new Scanner(System.in);
        char continuar;
       
        do{
            //char continuar;
            System.out.println("Por favor introduzca los datos de otro cantante.");

            System.out.println("Nombre :");
            EntradaTeclado entradaTeclado1=new EntradaTeclado();
            System.out.println("Disco con más ventas: :");
            EntradaTeclado entradaTeclado2=new EntradaTeclado();
           
            CantanteFamoso cantante=new CantanteFamoso();
            cantante.setNombre(entradaTeclado1.getEntradaTeclado());
            cantante.setDiscoConMasVentas(entradaTeclado2.getEntradaTeclado());
           
            listaDeCantantes1.añadirCantantesFamosos();
            listaDeCantantes1.setCantanteFamoso(cantante);
           
            System.out.println("La lista actualizada contiene los siguientes datos:");
            listaDeCantantes1.listarCantantesFamosos();
            System.out.println("¿Desea introducir los datos de otro cantante (s/n)?");
            opcion=sc.nextLine();
             continuar = opcion.charAt(0);
        }while(continuar=='s' || continuar=='S');
    }
   
}

Para este ejercicio quise seguir un orden, como indicaba el enunciado, pero mientras resolvía me generaron bastantes dudas la cuales olvide algunas, tuve que guiarme de un ejercicio resuelto para este ejercicio y de internet
  • Me parece desordenado el código. hay forma de ordenadarlo o reducirlo
  • Como usaria lo metodos set y get o ya no seria necesario
  • Para usar el char en vez del String. use ese codigo que encontre en internet. Hay una forma de resumir el codigo xq con el char uso 2 variables.
    String opcion=new String();
    char continuar;.
    En cambio usando solo String seria:
    String continuar = new String();
    continuar=sc.nextLine();
    while(continuar.equalsIgnoreCase("s"))
  • se q los métodos set son parecidos a los métodos que utilice en este ejercicio porque no devuelven nada pero modifican algo, en cambio los métodos get como se utilizaría para este ejercicio
  • en el codigo
    cantante.setNombre(entradaTeclado1.getEntradaTeclado());
    cantante.setDiscoConMasVentas(entradaTeclado2.getEntradaTeclado());
    esa seria la única forma de obtener los datos y si es que tuviera mas atributos como Nacimiento,Nacionalidad,Género(s), etc. si hubiera otra forma de obtener los datos, cual seria la mejor forma
  • Si borro esta parte del código en el main //listaDeCantantes1.añadirCantantesFamosos();
    pareciera como si no afectaría nada, porque
« Última modificación: 12 de Mayo 2015, 13:05 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola, a este método le veo poca utilidad

Código: [Seleccionar]
    //método que permita añadir objetos de tipo CantanteFamoso a la lista
    public void añadirCantantesFamosos(){
        CantanteFamoso ca=new CantanteFamoso();
        listaCantantesFamosos.add(ca);
    }

Porque lo que haces es añadir un cantante sin datos a la lista, pero un cantante sin datos sirve de poco. Creo que ese código sobra ?

Este método sí es útil pero deberías cambiarle el nombre:

Código: [Seleccionar]
    public void setCantanteFamoso(CantanteFamoso Cantante){
        listaCantantesFamosos.add(Cantante);
    }

Si lo que hace el método es añadir (add) ¿Por qué le pones como nombre de método set? El nombre correcto sería addCantanteFamoso

Sobre las cuestiones que preguntas:

1. Irás aprendiendo a mejorar el orden y reducir código a medida que vayas haciendo más ejercicios

2. Los métodos get y set se suelen incluir aunque no los vayamos a usar (aunque en realidad no es obligatorio incluirlos)

3. Puedes usar un String y olvidarte del char

4. Los get se utilizan cuando es necesario, si no son necesarios no

5. En caso de muchos datos tendrías que hacerlo con un bucle y posiblemente introduciendo los datos en un array o en una colección

6. ¿Por qué? Porque esa línea no está haciendo nada. Deberías borrar tanto el método (que no hace nada sino añadir un cantante vacío) como esa línea.

Saludos

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
Como te dijo Ogramar y Alex ahora no te preocupes, no debí comentarte lo del char es irrelevante. ;)

Para recojerlo con charAt(0) seria;
Scanner sc = new Scanner(System.in);
char letra;
letra =  sc.next().charAt(0); esto recoje el primer caracter del scanner, por ejemplo.

rogergcc

  • Sin experiencia
  • *
  • Mensajes: 17
    • Ver Perfil
Mucha Gracias Alex Rodríguez y Lorenzo31 por las correcciones   :)

 

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