4
« en: 14 de Julio 2016, 19:12 »
Hola hymsoft!
Tu solución a este ejercicio cumple con lo requerido en el enunciado del mismo.
No obstante, podemos mejorar mucho tu código, es bueno que tengas claras algunas cosas a la hora de escribir o estructurar código, por ejemplo ten en cuenta:
Redundancia: Si tienen la misma función y rendimiento, un código limpio, ligero y claro es preferido por todos ante un código robusto y con exceso de código innecesario. Un buen programador evita reinventar la rueda. (redundancia de código)
Reutilizar código: La reutilizacion de código es nuestro mejor aliado para crear un código mas limpio, ligero y amigable a los ojos de quien lo lee.
Delegación de responsabilidades: Una clase debe de hacer lo que dice su nombre que es o que hace y solo eso. Si es una clase EntradaDeTeclado, debe de limitarse a solo eso, generar una entrada para que el usuario pueda escribir, cosas como mostrar mensajes en pantalla desde esta clase o analizar y realizar operaciones (diferente a guardar lo escrito en la entrada) con el valor de lo escrito por el usuario no son propias de un código bien estructurado.
He editado tu código y he dejado algunos comentarios en cada clase que tal vez te puedan ser útiles. Cuando ejecutes el código, veras un mismo resultado con muchas menos lineas de código (sin contar los comentarios XD)
A continuación tus tres clases con ciertas modificaciones:
EntradaDeTeclado
/**
* Clase para manipular la entrada por teclado
*
* @author aprenderaprogramar
* @version
*/
import java.util.Scanner;
/*Una clase debe de hacer lo que su nombre dice que es o que hace y no nada mas.*/
public class EntradaDeTeclado
{
//Constructor por defecto
public EntradaDeTeclado(){
/*Este constructor puede ser invocado aun si no estuviese declarado en esta clase, siempre y cuando
* no exista ningún otro constructor (con argumento/s) declarado en esta clase, se considera buena practica el declararlo */
}//cierre constructor por defecto
/*Este método retorna un String como resultado de lo que el usuario escriba por teclado*/
public String pedirEntrada(){//metodo de clase
Scanner entradaScanner = new Scanner(System.in);
String entradaTeclado;
entradaTeclado = entradaScanner.nextLine();
return entradaTeclado;
}//cierre pedir entrada
}
ListaCantantesFamosos
/**
* Clase generica de cantantes famosos
*
* @author Hugo Segura
* @version (a version number or a date)
*/
import java.util.ArrayList;
import java.util.List;
/*Para un buen programador, los métodos get y set de una variable de clase, no son opcionales
* Siempre han de ser declarados aun cuando se crean innecesarios*/
public class ListaCantantesFamosos
{
//Declaracion de variables
private List<String> listadenombres = new ArrayList<String>();/*Array de objetos string
que va a guarar los nombres*/
//fin declaracion variables
//Constructor
public ListaCantantesFamosos(){
//Agrego 3 nombres por defecto
/*No es logico crear un metodo agregarCantante, cuando java nos proporciona el
* metodo add(String value) para los tipo List, y realiza exactamente lo que necesitamos que es
* agregar un String al ArrayList de String, hacer esto se considera reinventar la rueda o
* redundancia*/
listadenombres.add("David Gilmour");
listadenombres.add("Brian Johnson");
listadenombres.add("Rod Evans");
}//cierre constructor
public List<String> getListadenombres() {
return listadenombres;
}
public void setListadenombres(List<String> listadenombres) {
this.listadenombres = listadenombres;
}
}
TestListaCantantesFamosos
/**
* Clase principal para resolucion ejercicio CU00665B
*
* @author Hugo Segura
* @version (a version number or a date)
*/
/*La clase con el método main es la responsable de dirigir el flujo del programa y en este caso, responsable
* de realizar tareas con los valores de lo escrito por el usuario y de mostrar mensajes en pantalla*/
public class TestListaCantantesFamosos
{
public static void main(String[] args){
ListaCantantesFamosos lista1 = new ListaCantantesFamosos();//Creo el objeto
EntradaDeTeclado entradaDeTeclado = new EntradaDeTeclado();/*Con este unico objeto, pediremos
todas las entradas de datos al usuario (reutilizacion de código)*/
//Declaramos dos variables tipo String que contendrán cada una un valor escrito por el usuario
String entrada1, entrada2;//Si son de un mismo tipo, podemos declararlas en una sola linea, separadas por comas
System.out.println("Empecemos con el programa\n-------------------------\nIntroduce "
+ "el nombre de 2 cantantes famosos...\n\nNombre del Cantante 1:");
entrada1 = entradaDeTeclado.pedirEntrada();
System.out.println("Nombre del Cantante 2:");
entrada2 = entradaDeTeclado.pedirEntrada();
System.out.println("\nMuchas Gracias...");
//agrego los nombres solicitados
lista1.getListadenombres().add(entrada1);
lista1.getListadenombres().add(entrada2);
System.out.println("\nEl listado de mis Cantantes Famosos mas los tuyos es el siguiente:\n");
int i = 0;/*Usaremos esta variable como un contador en el for each (otra opción seria usar un bucle
for normal)*/
for(String cantante: lista1.getListadenombres()){//Usamos un for each para recorrer la lista de cantantes
i++;
System.out.println("Cantante " + i + ": " + cantante);//Listo todos los nombres
}
}
}
Cualquier duda, no dudes en preguntar.
Saludos!!