Autor Tema: Evitar la repetición de instrucciones en programación Java ejemplo CU00667B  (Leído 3262 veces)

hymsoft

  • Intermedio
  • ***
  • Mensajes: 103
  • hymsoft
    • Ver Perfil
Buenas noches nuevamente... Analizando todo lo que me van diciendo en los ejercicios anteriores, voy depurando(o por lo menos intentando) mis clases, dandole mas funcionalidades para evitar repeticiones de codigo en otras.

Espero que se vayan ajustando a lo que deberia ser un programador java :-)

Presento mi solución para el ejercicio CU00667B del tutorial de programación en lenguaje Java para no expertos.

Como siempre, espero los comentarios de los que mas saben y de los que menos tambien. Muchas gracias y saludos!!!

Código: [Seleccionar]
/**
 * Clase principal de prueba para la resolucion del ejercicio CU00667B
 *
 * @author Hugo Segura
 * @version (a version number or a date)
 */
public class TestCU00667B
{
    public static void main(String[] args){
        EntradaDeTeclado cargoMasCantantes = new EntradaDeTeclado();//objeto para pedir el ingreso por teclado   
        System.out.println("Comencemos con el prorgama...\n");
        //Creo el objeto "ListaCantantesFamosos"
        ListaCantantesFamosos miLista = new ListaCantantesFamosos();
       
        do{
            //solicito el ingreso de otro cantate
            System.out.println("\nPor Favor ingrese los datos de otro cantante.");
            miLista.agregarCantante();
            miLista.imprimirLista("La lista actualizada contiene los siguientes datos:");//Actualizo el listado
            //mientras quiera seguir agregando cantantes..
        }while
            (cargoMasCantantes.pedirEntrada("\nDesea introducir los datos de otro cantante?? (S/N)").equalsIgnoreCase("S"));
    }
}

Código: [Seleccionar]
/**
 * Clase para manipular la entrada por teclado
 *
 * @author Hugo Segura con correcciones de aprenderaprogramar.com
 */

import java.util.Scanner;

public class EntradaDeTeclado
{
   public EntradaDeTeclado(){}//constructor por defecto
   
   /* Este metodo retorna un String como reultado de lo ingresado
    * por el usuario mediante el teclado
    * El parametro es un String para mostrar un mensaje
    */
   public String pedirEntrada(String mensaje_a_mostrar){
       String entradaTeclado = "";
       
       System.out.print(mensaje_a_mostrar);
       Scanner entradaScanner = new Scanner(System.in);
       entradaTeclado = entradaScanner.nextLine();
       return entradaTeclado;
    }//cierre entradaTeclado
}//Cierre clase

Código: [Seleccionar]
/**
 * Clase para cargar los datos de un Cantante Famoso
 *
 * @author Hugo Segura
 * @version (a version number or a date)
 */
public class CantanteFamoso
{
   //Declaracion de variables
   private String nombre = "";
   private String discoConMasVentas = "";
   private EntradaDeTeclado miEntrada = new EntradaDeTeclado();//objeto para pedir el ingreso por teclado

   public CantanteFamoso(){//Constructor por defecto
        //Cuando creo el objeto solicito el ingreso de los datos
        nombre = miEntrada.pedirEntrada("Cantante: ");
        discoConMasVentas = miEntrada.pedirEntrada("Disco con mas ventas: ");
   }//cierre constructor
   
   public CantanteFamoso(String nombre,String discoConMasVentas){//constructor 2
       //por si quiero agregar un cantante si solicitar el ingreso por teclado
       this.nombre = nombre;
       this.discoConMasVentas = discoConMasVentas;
    }//cierre constructor 2
   
   public String getNombre(){
        return nombre;
   }
   
   public void setNombre(String nombre){
        this.nombre = nombre;
   }
   
   public String getDiscoConMasVentas(){
        return discoConMasVentas;
   }
   
   public void setDiscoConMasVentas(String discoConMasVentas){
        this.discoConMasVentas = discoConMasVentas;
   }
   
}//cierre clase

Código: [Seleccionar]
/**
 * Clase que permite manejar un ArrayList con Cantantes Famosos
 *
 * @author Hugo Segura
 * @version (a version number or a date)
 */

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

public class ListaCantantesFamosos
{
    //declaro un ArrayList de objetos "CantanteFamoso" y lo inicializo
    private ArrayList<CantanteFamoso> listaCantantesFamosos = new ArrayList<CantanteFamoso>();
       
    public ListaCantantesFamosos(){//constructor
        //Cuando creo el objeto agrego los cantantes por defecto y lo agrego al ArrayList
        listaCantantesFamosos.add(new CantanteFamoso("Madonna","All i want is you"));
        listaCantantesFamosos.add(new CantanteFamoso("Jorge Negrete","Jalisco"));
        //imprimo la lista inicial
        imprimirLista("La lista inicial contiene los siguientes datos:");
    }//cierre constructor
   
    public void agregarCantante(){
        listaCantantesFamosos.add(new CantanteFamoso());// uso el segundo constructor que pide los datos
    }//cierre agregarCantante
       
    public void imprimirLista(String titulo_a_mostrar){
        Iterator<CantanteFamoso> itrListaCantantesFamosos = listaCantantesFamosos.iterator();
        System.out.println(titulo_a_mostrar);
        while(itrListaCantantesFamosos.hasNext()){
            CantanteFamoso cantante = itrListaCantantesFamosos.next();
            System.out.println("Cantante: " + cantante.getNombre() +
                               "\tDisco con mas ventas: " + cantante.getDiscoConMasVentas());
        }//cierre while
       
    }//cierre imprimirLista
}


« Última modificación: 01 de Agosto 2016, 21:30 por Alex Rodríguez »
"Una persona inteligente es aquel que sabe ser tan inteligente como para contratar gente mas inteligente que el"

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:Tipo y metodo iterator (CU00667B)
« Respuesta #1 en: 20 de Julio 2016, 11:54 »
Buenos días, hymsoft.

Veo el ejercicio bien resuelto. Has cumplido con lo que pedía el mismo. Has usado el iterator para mostrar los nombres de los cantantes, muy bien. Lo que me ha llamado la antención es el primer constructor de la clase "CantanteFamoso". No se me habría ocurrido establacer el valor de las propiedades mediante la invocación de otro objeto. Considero que es muy interesante y los alumnos que van detrás de ti estaría bien que lo vean para ver que hay muchísimas maneras para conseguir una misma cosa. Felicidades.

Saludos.

hymsoft

  • Intermedio
  • ***
  • Mensajes: 103
  • hymsoft
    • Ver Perfil
Re:Tipo y metodo iterator (CU00667B)
« Respuesta #2 en: 20 de Julio 2016, 21:20 »
Gracias por tu comentario Dimitar, en realidad lo hice asi, porque viendo el codigo, asignaba el resultado de esa invocación en una variable String y despues ese resultado se lo asignaba a la propiedad. y de esa forma evito muchas lineas de codigo. Antes también escribia un System.out.println por cada vez que solicitaba el ingreso por teclado. Eso lo traslade a la clase EntradaDeTeclado como un parametro del metodo pedirEntrada, ahorrando tambien lineas de codigo repetitivo :-)
"Una persona inteligente es aquel que sabe ser tan inteligente como para contratar gente mas inteligente que el"

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:Tipo y metodo iterator (CU00667B)
« Respuesta #3 en: 22 de Julio 2016, 12:20 »
En programación, procurar evitar la repetición de instrucciones, es fundamental. Así que tu solución me parece estupenda y muy bien pensada.

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