Autor Tema: Iterar sobre una colección de objetos Tipo Iterator api Java. Ejercicio CU00667B  (Leído 2243 veces)

eduardoc

  • Principiante
  • **
  • Mensajes: 50
    • Ver Perfil
Buenas, dejo otro ejercicio, el CU00667B del curso básico de programación Java. Gracias de antemano. Saludos,

Edu.

Citar
EJERCICIO

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.


Clase (main): TestListaCantantesFamosos

Código: [Seleccionar]
// (CU00667B) - Tipo Iterator api Java. Ejemplo.
public class TestListaCantantesFamosos{
    public static void main(String[] Args){
        System.out.println("Inicio del programa.");
        System.out.println("====================");
       
        // Inicializar Lista.
        ListaCantantesFamosos2 listaCantantes = new ListaCantantesFamosos2();
       
        // Agregar Primer Cantante (carga inicial.)
        CantanteFamoso cantanteFamoso1 = new CantanteFamoso();
        cantanteFamoso1.setCantanteFamoso("Madonna", "All I want is you");
        listaCantantes.addCantanteFamoso(cantanteFamoso1);
       
        // Agregar Segundo Cantante (carga inicial.)
        CantanteFamoso cantanteFamoso2 = new CantanteFamoso();
        cantanteFamoso2.setCantanteFamoso("Jorge Negrete", "Jalisco");
        listaCantantes.addCantanteFamoso(cantanteFamoso2);

        listaCantantes.listarCantantesFamosos();

        String auxSeguirIngresando = "s";
       
        while(auxSeguirIngresando.equalsIgnoreCase("s")){
            listaCantantes.addCantanteFamoso(); 
            listaCantantes.listarCantantesFamosos();
           
            EntradaDeTeclado auxRespuesta = new EntradaDeTeclado("Continua Ingresando cantantes? (S/N)");
            auxSeguirIngresando = auxRespuesta.getEntrada();
        }
    }
}


Clase: ListaCantantesFamosos2

Código: [Seleccionar]
// (CU00667B).

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

public class ListaCantantesFamosos2{
    private ArrayList<CantanteFamoso> listaCantantesFamosos;
   
    public ListaCantantesFamosos2(){
        listaCantantesFamosos = new ArrayList<CantanteFamoso>();
    }
       
    public void addCantanteFamoso(){
        CantanteFamoso cantanteFamoso = new CantanteFamoso();
       
        EntradaDeTeclado entrada1 = new EntradaDeTeclado("Por favor, ingrese el nombre del cantante: ");
        cantanteFamoso.setCantante(entrada1.getEntrada());
       
        EntradaDeTeclado entrada2 = new EntradaDeTeclado("Por favor, ingrese el nombre del disco más ventas");
        cantanteFamoso.setDiscoConMasVentas(entrada2.getEntrada());
       
        listaCantantesFamosos.add(cantanteFamoso);
    }
   
    public void addCantanteFamoso(CantanteFamoso cantanteFamoso){
        listaCantantesFamosos.add(cantanteFamoso);
    }
   
    public void listarCantantesFamosos(){
        System.out.println("La lista actualizada contiene los siguientes datos:");
        Iterator<CantanteFamoso> it = listaCantantesFamosos.iterator();
        while (it.hasNext()){
            CantanteFamoso cantante = it.next();
            System.out.println("Cantante: " + cantante.getCantante() + " - Disco con más ventas: " + cantante.getDiscoConMasVentas());
        }
    }
}


Clase: CantanteFamoso

Código: [Seleccionar]
public class CantanteFamoso{
    String cantante;
    String discoConMasVentas;
   
    public CantanteFamoso(){
        cantante = "";
        discoConMasVentas = "";
    }

    // Setters.
    public void setCantante(String valorCantante){
        cantante = valorCantante;
    }
    public void setDiscoConMasVentas(String valorDiscoConMasVentas){
        discoConMasVentas = valorDiscoConMasVentas;
    }
   
    public void setCantanteFamoso(String valorCantante, String valorDiscoConMasVentas){
        cantante = valorCantante;
        discoConMasVentas = valorDiscoConMasVentas;
    }
   
    // Getters.
    public String getCantante(){return cantante;}
    public String getDiscoConMasVentas(){return discoConMasVentas;}
}

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

public class EntradaDeTeclado {
    private String entradaTeclado; //Variable de instancia (campo) de la clase
 
    // Constructor.
    public EntradaDeTeclado ()  {
        pedirEntrada(); //Esto es una llamada a un método interno. Al crear un objeto ejecutamos el método
    } //Cierre del constructor

    public EntradaDeTeclado(String textoPregunta){
        System.out.println(textoPregunta);
        pedirEntrada();
    }
   
    // Función interna de la clase en la que recibe un texto ingresado por teclado del usuario.
    public void pedirEntrada ()  {  //Método de la clase         
        entradaTeclado="";
        Scanner entradaEscaner = new Scanner (System.in);
        entradaTeclado = entradaEscaner.nextLine ();}
   
    // Getter, devuelve el texto ingresado.
    public String getEntrada () { return entradaTeclado;}
   
    // Getter devuelve la primer palabra del texto ingresado.
    public String getPrimeraPalabra ()  {
        for (int i=0; i < entradaTeclado.length() - 1; i++) {
            if (entradaTeclado.substring (i, i+1).equals(" ") ) {     //IMPORTANTÍSIMO: COMPARAMOS CON EQUALS
                return entradaTeclado.substring(0, i+1);}
        }
        return entradaTeclado;
    }
   
    // Función, devuelve la longitud (en caracteres) del texto ingresado.
    public int getLongitud ()  {  //Método de la clase
        return entradaTeclado.length();
    }

}
« Última modificación: 18 de Julio 2016, 18:35 por Alex Rodríguez »

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Re:Ejercicio: (CU00667B) - Tipo Iterator api Java.
« Respuesta #1 en: 14 de Julio 2016, 21:33 »
Por lo que veo y he comprobado funciona todo bien le ejercicios. En forma de comentario nomas entrada del teclado podía crear en el main nomas y pasar al método addCantanteFamoso() el objeto creado es decir addCantanteFamoso(CantanteFamoso Cantante) para no caer los objeto dentro del método agregar. :)

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola siguiendo lo comentado por DRANXZ88, en la clase ListaCantantesFamosos2 el método public void addCantanteFamoso() no acaba de convencerme, porque los métodos deben tener una sola responsabilidad. En este caso la responsabilidad más natural del método debería ser añadir un cantante recibido como parámetro a la lista. Sin embargo el método "se complica" pidiendo datos al usuario (esto no debería ser responsabilidad de este método).

Saludos

 

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