Autor Tema: Ejercicio CU00667B. Uso de Tipo Iterator api Java y clase que simula una lista  (Leído 3624 veces)

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Mi versión del Ejercicio propuesto en la Entrega Nº67. Ejercicio CU00667B.

clase CantanteFamoso
Código: [Seleccionar]
public class CantanteFamoso{
    // Declaración de los campos de instancia
    private String nombre;
    private String discoConMasVentas;
   
    public CantanteFamoso(){ // Constructor de clase vacio
    }

// SETTERS   
   
    public void setNombre(String valorNombre){
        nombre = valorNombre;
    }
   
    public void setDiscoConMasVentas (String valorDiscoConMasVentas){
        discoConMasVentas = valorDiscoConMasVentas;
    }
   
// GETTERS

    public String getNombre(){ return nombre; }
    public String getDiscoConMasVentas() { return discoConMasVentas; }
   
   
} // Fin de la clase

clase ListaCantantesFamosos
Código: [Seleccionar]
import java.util.ArrayList;


public class ListaCantantesFamosos{
   //Declaración de campos de instancia
   ArrayList<CantanteFamoso> listaCantantesFamosos;
   
   public ListaCantantesFamosos(){ //Constructor de clase
       listaCantantesFamosos = new ArrayList<CantanteFamoso>();
   }
   
   
   public void addListaCantante(CantanteFamoso valorCantante){ //Agrega un objeto CantanteFamoso a la Lista
       listaCantantesFamosos.add(valorCantante);
   }
   
   
} // fin de la clase

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

public class GestionadorEntradasTeclado{
    //Declaracion de campos de instancia de la clase vacia
   
    public GestionadorEntradasTeclado(){ // Constructor de clase
    }
   
     static String leer(){
        Scanner scannerTeclado = new Scanner (System.in);
        String valorTeclado = scannerTeclado.nextLine();
        return valorTeclado;
    }
     
} // Fin de la clase

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

public class Test{
    //Declaración de campos de instancia vacío
 
   public Test(){ //Constructor de clase vacío
   }

   private static CantanteFamoso AgregarCantante(){ // Crea nuevo objeto CantanteFamoso de manera manual. Se devuelve el objeto.
       //Declaración de variables locales del método
       CantanteFamoso tmpCantanteFamoso;
       
       tmpCantanteFamoso = new CantanteFamoso(); // Instanciación del objeto CantanteFamoso
       
       System.out.println("");
       System.out.println("Ingrese Nombre del Cantante:");
       tmpCantanteFamoso.setNombre(GestionadorEntradasTeclado.leer());
       System.out.println("Ingrese su Disco con más ventas:");
       tmpCantanteFamoso.setDiscoConMasVentas(GestionadorEntradasTeclado.leer());
       return tmpCantanteFamoso;
   } // fin de método 
 
   
   private static void mostrarLista(ListaCantantesFamosos tmpLista){ // Muestra la Lista completa
       //Declaración de variables locales del método
       CantanteFamoso tmpCantante;
       Iterator<CantanteFamoso> it;
       it = tmpLista.listaCantantesFamosos.iterator();
       
       System.out.println("");
       while(it.hasNext()){
           tmpCantante = it.next();
           System.out.println("Nombre: "+tmpCantante.getNombre()+". Disco más vendido: "+tmpCantante.getDiscoConMasVentas());
       }
   }  // fin de método

   
    public static void main (String[] args){ // método main
        //Declaración de variables locales
        ListaCantantesFamosos listaOchentosa;
        CantanteFamoso tmpCantante;
        String respuesta;
           
        listaOchentosa = new ListaCantantesFamosos(); // Instanciación de la Lista
       
        tmpCantante = AgregarCantante(); // Creación del primer objeto CantanteFamoso
        listaOchentosa.addListaCantante(tmpCantante); // Agrego el primer objeto a la lista
        tmpCantante = AgregarCantante(); // Creación del segundo objeto CantanteFamoso
        listaOchentosa.addListaCantante(tmpCantante); // Agrego el segundo objeto a la lista
       
        System.out.println("");
        System.out.println("La lista inicial contiene los siguientes datos:"); // Mostrar la Lista inicial
        mostrarLista(listaOchentosa);
       
        do{
            tmpCantante = AgregarCantante(); // Creación de un nuevo objeto CantanteFamoso
            listaOchentosa.addListaCantante(tmpCantante); // Agrego el nuevo objeto a la Lista
            System.out.println("");
            System.out.println("La lista actualizada contiene los siguientes datos:"); // Mostrar la Lista actualizada
            mostrarLista(listaOchentosa);
           
            System.out.println("");
            System.out.println("Presione cualquier letra para agregar un nuevo Cantante a la Lista, o presione la letra \"N\" para salir.");
           
            respuesta = GestionadorEntradasTeclado.leer();
           
        }while(!respuesta.equalsIgnoreCase("n"));
       
        System.out.println("Gracias por usuar el software. Hasta luego!");   
   
    } // fin main
   
   
} // fin de la clase

Agradezco como siempre las correcciones y/o sugerencias. Muchas gracias.
« Última modificación: 16 de Marzo 2015, 17:08 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:Ejercicio CU00667B. Uso de Tipo Iterator api Java.
« Respuesta #1 en: 16 de Marzo 2015, 15:44 »
Hola RaGA

Tu ejercicio está perfecto. OK

A esta altura del curso, quiero comentarte que para una eficiencia del código y mayor coherencia, en la clase Test, el método llamado 
    mostrarLista(...)
debería estar en la clase ListaCantantesFamosos, pues manipula información 100% exclusiva de esa clase ListaCantantesFamosos.

De esta forma el método main se descarga de código y se encarga exclusivamente de dar órdenes usando los métodos del resto de las clases del proyecto.

Saludos

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Muchas gracias por la sugerencia toni_apr. El cambio sugerido tiene a su vez implícito el hacerme notar el enfoque de POO que debemos ir incorporando creo.

Además: no solo el método mostrarLista(...) queda entonces incluído dentro de la clase ListaDeCantantesFamosos sino que a su vez me permite declarar al campo tipo ArrayList de esa clase como Private. Esto no lo había podido realizar de la manera en que lo había codificado yo. Mantener todos los campos de instancia declarados como privados de la clase (inaccecibles desde fuera) creo que también es una buena política, cierto?. Y que ellos sean solo modificables por los propios métodos de la clase.

Saludos!

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola Raga

Si, así es, siempre oirás decir que los campos de la clase o atributos se declaran private. (salvo excepciones muy raras en que necesitemos algo especial.)

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