/**
 * Clase principal para resolucion ejercicio CU00665B
 * 
 * @author Hugo Segura
 * @version (a version number or a date)
 */
public class TestListaCantantesFamosos
{
    public static void main(String[] args){
        ListaCantantesFamosos lista1 = new ListaCantantesFamosos();//Creo el objeto
        
        System.out.println("Empecemos con el programa");
        System.out.println("-------------------------");
        System.out.println("Introduce el nombre de 2 cantantes famosos...");
        System.out.println("Nombre del Cantante 1:");
        EntradaDeTeclado entrada1 = new EntradaDeTeclado();
        System.out.println("Nombre del Cantante 2:");
        EntradaDeTeclado entrada2 = new EntradaDeTeclado();
        System.out.println("\nMuchas Gracias...");
        //agrego los nombres solicitados
        lista1.agregarNombre(entrada1.getEntrada());
        lista1.agregarNombre(entrada2.getEntrada());
                
        System.out.println("\nEl listado de mis Cantantes Famosos mas los tuyos es el siguiente:\n");
        lista1.listarNombres();//Listo todos los nombres
    }
}
/**
 * Clase para manipular la entrada por teclado
 * 
 * @author aprenderaprogramar
 * @version 
 */
import java.util.Scanner;
public class EntradaDeTeclado
{
   private String entradaTeclado;//variable de instancia de clase
   
   //Constructor
   public EntradaDeTeclado(){
       entradaTeclado = "";
       pedirEntrada();//Llamada a un metodo interno. Al crear el objeto automaticamente ejecutamos el metodo
   }//cierre constructor
   
   public void pedirEntrada(){//metodo de clase
       Scanner  entradaScanner = new Scanner(System.in);
       entradaTeclado = entradaScanner.nextLine();
    }//cierre pedir entrada
    
    public String getEntrada(){return entradaTeclado;}//Cierre getEntrada
    
    public String getPrimeraPalabra(){
        for(int i = 0;i<entradaTeclado.length() -1;i++){
            if(entradaTeclado.substring(i,i+1).equals(" ")){return entradaTeclado.substring(0,i+1);}
            //si no se detecta ningun espacio se devuelve la cadena completa
        }//cierre for
        return entradaTeclado;    
    }//cierre get PrimeraPalabra
    
    public int getLongitud(){//metodo de clase
        return entradaTeclado.length();
    }//cierre getLongitud
}/**
 * Clase generica de cantantes famosos
 * 
 * @author Hugo Segura
 * @version (a version number or a date)
 */
import java.util.ArrayList;
public class ListaCantantesFamosos
{
    //Declaracion de variables
        private String nombreDeLaLista = "CantantesFamosos";
        private ArrayList<String> listadenombres;//Array de objetos string que va a guarar los nombres
    //fin declaracion variables
    
    //Constructor
    public ListaCantantesFamosos(){
        listadenombres = new ArrayList<String>();//creo el array
        //Agrego 3 nombres por defecto
        agregarNombre("David Gilmour");
        agregarNombre("Brian Johnson");
        agregarNombre("Rod Evans");
    }//cierre constructor
    
    //Metodo para agregar nombres a la lista
    public void agregarNombre(String nombreCantante){
        listadenombres.add(nombreCantante);
    }//fin metodo agregarNombre
    
    //Metodos para imprmir los nombres 
    public void listarNombres(){
        //como no recibe parametros imprimo todos los nombres del listado
        for(int i = 0; i < listadenombres.size();i++){
            System.out.println(elNombre(i));
        }
    }//fin listarNombres
    
    //Metodos para imprmir los nombres 
    public void listarNombres(int posicion){
        //como recibe un parametro uso el metodo correspondiente para obtener un nombre
        System.out.println(elNombre(posicion));
    }//fin listarNombres
    
    //Metodo que devuelve el nombre en una posicion especificada
    //lo encapsulo para que usen el metodo listarNombres con o sin argumentos segun el listado que se necesite
    private String elNombre(int posicion){
        if (posicion >= 0 && posicion < listadenombres.size()){
            return listadenombres.get(posicion);
        }else{
            return "No existe nombre para la posicion indicada";
        }
    }//fin elNombre
}
/**
 * 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
    
    
}/**
 * 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;
	}
    
    
}/**
 * 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
        }
    }
}