Autor Tema: Java diferencia entre tipo Iterator mayúscula y iterator() minúscula CU00667B  (Leído 2657 veces)

luisdn

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Hola a todos, dejo una solución a este ejercicio CU00667B del tutorial de Java elemental.

Es posible que contenga errores.

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). Puedes comprobar si tu código es correcto consultando en los foros aprenderaprogramar.com.


Código CantanteFamoso:

Código: [Seleccionar]
public class CantanteFamoso1{
    String nombre, disco;
    CantanteFamoso1(){
        nombre = "";
        disco = "";
    }
   
    public void addNombre( String nom, String dis){
        nombre = nom;
        disco = dis;
    }
   
    public String getNombre(){
        return nombre;
    }
   
    public String getDisco(){
        return disco;
    }
}
Código ListaCantantesFamosos:
Código: [Seleccionar]
import java.util.ArrayList;

public class ListaCantantesFamosos1{
    ArrayList<CantanteFamoso1> list ;
    public ListaCantantesFamosos1(){
        list =  new ArrayList<CantanteFamoso1>() ;
    }

    public void addList(CantanteFamoso1 can){
        list.add(can);       
    }
}


Código Test:

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

public class Test1{
    public static  void main(String args[]){
        CantanteFamoso1 cantante;
        ListaCantantesFamosos1 lista1 = new ListaCantantesFamosos1();
        Scanner sc = new Scanner(System.in);int menu, i = 0;
        String nombre, disco;
       
        System.out.println("Comienza el programa");
        while( i < 2){
            System.out.println("Introduzca el nombre del cantante: ");
            nombre = sc.nextLine();
            System.out.println("Introduzca el disco más vendido: ");
            disco = sc.nextLine();
            cantante = new CantanteFamoso1();
            cantante.addNombre(nombre, disco);
            lista1.addList(cantante);
            i++;
        }

        Iterator<CantanteFamoso1> it = lista1.list.iterator();
        System.out.println("La lista inicial contiene los siguientes datos: ");
        while(it.hasNext()){
            cantante = it.next();
            System.out.print("Cantante: "+cantante.getNombre());
            System.out.println(". Disco: "+cantante.getDisco());
        }

        do{
            System.out.println("\nMenu:\n1)Introducir nuevos datos.\n2)Salir.");
            menu = sc.nextInt();
            sc.nextLine();
            if(menu == 1){
                System.out.println("Introduzca el nombre del cantante: ");
                nombre = sc.nextLine();
                System.out.println("Introduzca el disco más vendido: ");
                disco = sc.nextLine();
                cantante = new CantanteFamoso1();
                cantante.addNombre(nombre, disco);
                lista1.addList(cantante);
                System.out.println("La lista actualizada contiene los siguientes datos: ");
                Iterator<CantanteFamoso1> it1 = lista1.list.iterator();
                while(it1.hasNext()){
                    cantante = it1.next();
                    System.out.println("Cantante: "+cantante.getNombre());
                    System.out.println("Disco: "+cantante.getDisco());
                }
            }
        }while (menu != 2);
    }
}

Muchas gracias.
« Última modificación: 25 de Marzo 2017, 22:13 por Ogramar »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:cu00667b-Tipo Iterator api Java
« Respuesta #1 en: 30 de Enero 2017, 22:49 »
Hola luisdn.

Te cuento un poco.

Clase CantanteFamoso1:

Es recomendable usar los modificadores de acceso a los atributos de una clase, en esta clase lo ideal sería que fuesen "private", puesto que no nos interesa que se pueda acceder a ellos directamente desde otras clases, para eso usaremos los métodos setter y getter.
Luego creas  un método tipo procedimiento que establezca el valor del nombre y del disco al mismo tiempo, lo que te haría falta es un constructor con parámetros.

Código: [Seleccionar]
public CantanteFamoso1( String nom, String dis){
        nombre = nom;
        disco = dis;
    }

También faltarían los métodos para establecer (setter), para poder asignar los valores de los atributos, que serían un método por cada atributo y no uno para establecer el valor de los dos, para que lo entiendas mejor, ¿que pasaría si quisiéramos solo cambiar el valor de uno de los atributos?.

Clase ListaCantantesFamosos1:

Igual que en la anterior clase, es recomendable usar los modificadores de acceso, tanto para métodos como para atributos.
Sobre el nombre del método "addList", lo que añadimos es un cantante a la lista, no una lista, por lo cual sería mejor algo parecido a "addCantanteFamoso()" o algo parecido, es bueno que los nombres de atributos y métodos describan en la medida de lo posible lo que representan.

Clase Test:

Si has escrito ya el constructor con parámetros de la clase CantanteFamoso1 que te comente unas líneas arriba, podrás comprobar que ahora puedes crear los nuevos cantantes de la siguiente forma:

Código: [Seleccionar]
CantanteFamoso1 cantante = new CantanteFamoso1(nombre, disco);
y si quisieras cambiar el valor de alguno de sus atributos, podría usar alguno de los métodos setter que te comente anteriormente.

Otra cosa que podrías cambiar es la parte del iterator en la clase test, podría crear un método en la clase ListaCantantesFamosos1 que muestre el contenido de la lista, de esta forma no repetirás esa parte del código, puesto que solo tendrías que llamar al método del objeto creado, por ejemplo en la clase test escribiríamos lo siguiente en vez de todo lo que con lleva el recorrido de la lista:
 
Código: [Seleccionar]
lista1.mostrarContenidoLista();
Y en la clase ListaCantantesFamosos crearíamos el siguiente método:

Código: [Seleccionar]
public void mostrarContenidoLista() {
    Iterator<CantanteFamoso1> it = list.iterator();
    while(it.hasNext()){
             CantanteFamoso1 cantante = it.next();
             System.out.print("Cantante: " + cantante.getNombre());
             System.out.println(". Disco: " + cantante.getDisco());
         }
    }

Saludos. ;D

luisdn

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:Java. Tipo Iterator y método iterator(). CU00667B
« Respuesta #2 en: 31 de Enero 2017, 13:16 »
Muchas gracias por responder y además hacerlo tan rápido.
He modificado el código como me has dicho (creo), y está más claro y más ordenado.
Codigo CantanteFamoso:
Código: [Seleccionar]
public class CantanteFamoso1{
    private String nombre, disco;
    public CantanteFamoso1(){
        nombre = "";
        disco = "";
    }
   
    public CantanteFamoso1( String nom, String dis){
        nombre = nom;
        disco = dis;
    }
   
    public void setNombre(String n){ nombre = n;}
   
    public void setDisco(String d){disco = d;}   
   
    public String getNombre(){
        return nombre;
    }
   
    public String getDisco(){
        return disco;
    }
}
   
Código ListaCantanteFamoso:
Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Iterator;

public class ListaCantantesFamosos1{
    private ArrayList<CantanteFamoso1> list ;
    public ListaCantantesFamosos1(){
        list =  new ArrayList<CantanteFamoso1>() ;
    }

    public void addCantanteFamoso(CantanteFamoso1 can){
        list.add(can);       
    }

    public void mostrarContenidoLista(){
        Iterator<CantanteFamoso1> it = list.iterator();
        while(it.hasNext()){
            CantanteFamoso1 cantante = it.next();
            System.out.print("Cantante: "+cantante.getNombre());
            System.out.println(". Disco: "+cantante.getDisco());
        }
    }

}   
Código Test:
Código: [Seleccionar]
import java.util.Scanner;

public class Test1{
    public static  void main(String args[]){
        CantanteFamoso1 cantante;
        ListaCantantesFamosos1 lista1 = new ListaCantantesFamosos1();
        Scanner sc = new Scanner(System.in);
        int menu, i = 0;
        String nombre, disco;

        System.out.println("Comienza el programa");
        while( i < 2){
            System.out.println("Introduzca el nombre del cantante: ");
            nombre = sc.nextLine();
            System.out.println("Introduzca el disco más vendido: ");
            disco = sc.nextLine();
            cantante = new CantanteFamoso1(nombre, disco);
            lista1.addCantanteFamoso(cantante);
            i++;
        }

        System.out.println("La lista inicial contiene los siguientes datos: ");
        lista1.mostrarContenidoLista();

        do{
            System.out.println("\nMenu:\n1)Introducir nuevos datos.\n2)Salir.");
            menu = sc.nextInt();
            sc.nextLine();
            if(menu == 1){
                System.out.println("Introduzca el nombre del cantante: ");
                nombre = sc.nextLine();
                System.out.println("Introduzca el disco más vendido: ");
                disco = sc.nextLine();
                cantante = new CantanteFamoso1(nombre, disco);
                lista1.addCantanteFamoso(cantante);
                System.out.println("La lista actualizada contiene los siguientes datos: ");
                lista1.mostrarContenidoLista();
            }
        }while (menu != 2);
    }
}

Muchas gracias de nuevo.
Saludos.

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Java. Tipo Iterator y método iterator(). CU00667B
« Respuesta #3 en: 31 de Enero 2017, 17:12 »
Buenas.

Ahora todo bien, lo importante era que te quedase claro todo lo que te comente, y veo que sí.

Saludos. ;D

 

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