Autor Tema: Cómo reducir el código Java para ocupar menos líneas compacta Ejercicio CU00666B  (Leído 5662 veces)

eduardoc

  • Principiante
  • **
  • Mensajes: 50
    • Ver Perfil
Buenas, comparto la solución del ejercicio de referencia CU00666B del curso de programación Java para no expertos. Muchas gracias, saludos.

Edu.

Citar
EJERCICIO

Crea una clase denominada ListaCantantesFamosos que al ser inicializada contenga un ArrayList con tres Strings que sean el nombre de cantantes famosos. Crea una clase test con el método main que inicialice un objeto ListaCantantesFamosos y usando un for extendido muestre los cantantes en la lista por pantalla. Se debe pedir al usuario un nombre más de cantante famoso, y una vez introducido mostrar la lista actualizada usando un for extendido. Una vez mostrada la lista actualizada, se debe dar opción a elegir entre volver a introducir otro cantante o salir del programa (se podrán introducir tantos cantantes como se desee, para ello usa un bucle while que dé opción a elegir al usuario).

https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=632:el-for-extendido-o-bucles-for-each-en-java-ventajas-e-inconvenientes-ejercicio-ejemplo-resuelto-cu00666b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188

Código: [Seleccionar]
// (CU00666B) - El for extendido o bucles for each en Java.
public class TestListaCantantes{
    public static void main (String [] args){
        // Inicio del programa.
        System.out.println("Inicio del programa");
       
        // Crear colección de Lista de cantantes famosos.
        ListaCantantesFamosos listaCantantes = new ListaCantantesFamosos("Cantantes famosos");

        // Agregado de 3 cantantes.
        listaCantantes.addNombre("Madonna");
        listaCantantes.addNombre("Sting");
        listaCantantes.addNombre("Carlos Gardel");

        // Listado de cantantes.
        listaCantantes.listarCantantes();

        String auxRespuesta; // auxiliar a usar para salir del do while.
       
        // Utilizo do while, en vez de while, porque la consigna del ejercicio indica que hay que solicitar al usuario un nuevo ingreso y de este modo se evita una pregunta.
         do {
            // Solicitar un cantante más al usuario.
            listaCantantes.pedirYAgregarUnCantante();
            // Listado de cantantes.
            listaCantantes.listarCantantes();
           
            // Consulta si desea seguir ingresando cantantes.
            System.out.println("¿Desea continuar ingresando cantantes famosos?: (S/N)");
            EntradaDeTeclado entrada1 = new EntradaDeTeclado();
            auxRespuesta = entrada1.getEntrada();
           
        } while (auxRespuesta.equalsIgnoreCase("S"));
    }
}

Código: [Seleccionar]
// (CU00665B) - Clase ArrayList del api Java.
import java.util.ArrayList; // clase utilizada para el uso de ArrayList.

public class ListaCantantesFamosos{
    private String nombreDeLaLista;
    private ArrayList<String> listaCantantesFamosos;
   
    public ListaCantantesFamosos(String nombre){         // Constructor.
        nombreDeLaLista = nombre;
        listaCantantesFamosos = new ArrayList<String>(); // Crea objeto del tipo ArrayList.
    }
   
    // Agregar elemento a la lista.
    public void addNombre (String valor_nombre){listaCantantesFamosos.add(valor_nombre);}
   
    // Getter tamaño de lista.
    public int getTamannoLista (){return listaCantantesFamosos.size();}
   
    //  Getter nombres.
    public String getNombreCantante(int posicion){return listaCantantesFamosos.get(posicion);}
   
    // Listar cantantes, usando un for extendido.
    public void listarCantantes(){
        System.out.println ("La lista ha quedado formada por " + this.getTamannoLista() + " elementos");
        int i = 0;
        for (String nombreCantantes : listaCantantesFamosos){
            System.out.println ("Elemento " + (i+1) + ": " + this.getNombreCantante(i) );
            i++;
        }
    }
   
    public void pedirYAgregarUnCantante(){
            System.out.println("Por favor, ingrese el nombre de un cantante famoso: ");
            EntradaDeTeclado entrada1 = new EntradaDeTeclado();
            this.addNombre(entrada1.getEntrada());       
    }
       
}

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

public class EntradaDeTeclado {
    private String entradaTeclado; //Variable de instancia (campo) de la clase
 
    // Constructor.
    public EntradaDeTeclado ()  {
        entradaTeclado="";
        pedirEntrada(); //Esto es una llamada a un método interno. Al crear un objeto ejecutamos el método
    } //Cierre del constructor
 
    // 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         
        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: 10 de Julio 2016, 18:07 por Alex Rodríguez »

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Re:Ejercicio: (CU00666B) - El for extendido o bucles for each en Java.
« Respuesta #1 en: 04 de Julio 2016, 22:39 »
Esta bien aunque hay otra forma de hacer que sea mas adecuada con lo que estamos haciendo en este curso pero es una opinión  ademas es mas corto y ordenado pero esta bien lo que hace. Por ejemplo vos podía crear el objeto EntradaDeTeclado entrada1 = new EntradaDeTeclado(); en el main nomas y que tu lista cargada podía estar en ListaCantantesFamoso nomas ya es una comentario nomas saludos y siga así. :) :) :)

eduardoc

  • Principiante
  • **
  • Mensajes: 50
    • Ver Perfil
Re:Ejercicio: (CU00666B) - El for extendido o bucles for each en Java.
« Respuesta #2 en: 05 de Julio 2016, 14:50 »
Hola DRANXZ88, cómo estás?

Muchas gracias por tu respuesta.

Te pido disculpas pero creo que no llego a entenderte. Cuando mencionás:

Citar
Por ejemplo vos podía crear el objeto EntradaDeTeclado entrada1 = new EntradaDeTeclado(); en el main nomas
te referís a que sólo debería usarla en la clase: TestListaCantantes y no duplicarlo en la clase: ListaCantantesFamosos?
Si es esto, coincido con vos pero por más que intenté no encontré modo de llamar a "entrada1".
Si pudieses aclarame, te lo voy a a gradecer.

Citar
y que tu lista cargada podía estar en ListaCantantesFamoso nomas
y esto sería que la cargue en la clase: ListaCantantesFamosos?
Si es esto, la inicialicé en la clase: TestListaCantantes porque así lo mencionaba la consigna del ejercicio.

Aprovecho para hacer una consulta a quien pueda ayudarme.

En la clase EntradaDeTeclado incluí el siguiente código:
Código: [Seleccionar]
    public String respuestaAPregunta(String textoPregunta){
        System.out.println(textoPregunta);
        pedirEntrada();
        return entradaTeclado;
    }

Con la finalidad de disponer de un método para hacer preguntas al usuario final. Me pareció interesante probar una función que si bien para este código no va a hacer la gran diferencia, creo que en diseños más amplios podría ser útil (al menos la idea).
Si alguien me explica como debería llamarlo desde las clases: TestListaCantantes o ListaCantantesFamosos porque por más que intenté siempre me dio un error de compilación en estas dos clases, no así en la clase EntradaDeTeclado.

Gracias mil a todos. Saludos,
Edu.

DRANXZ88

  • Avanzado
  • ****
  • Mensajes: 356
    • Ver Perfil
Re:Ejercicio: (CU00666B) - El for extendido o bucles for each en Java.
« Respuesta #3 en: 05 de Julio 2016, 17:24 »
Hola eduardoc hice alguna modificacion en tu codigo para comparar con el tuyo y para darme tu opinion tu codigo que no utilize le puse en comentario nomas.
clase principal main
Código: [Seleccionar]
package ejercicioscu00666eduardoc;

public class EjerciciosCu00666Eduardoc {

    public static void main(String[] args) {
        // Inicio del programa.

        // Crear colección de Lista de cantantes famosos.
        ListaCantantesFamosos listaCantantes = new ListaCantantesFamosos();
        EntradaDeTeclado entrada = new EntradaDeTeclado();
        System.out.println("Inicio del programa");
        listaCantantes.listarCantantes();
        // Agregado de 3 cantantes.
        //listaCantantes.addNombre("Madonna");
        //listaCantantes.addNombre("Sting");
        //listaCantantes.addNombre("Carlos Gardel");

        // Listado de cantantes.
        String auxRespuesta; // auxiliar a usar para salir del do while.

        // Utilizo do while, en vez de while, porque la consigna del ejercicio indica que hay que solicitar al usuario un nuevo ingreso y de este modo se evita una pregunta.
        do {
            // Solicitar un cantante más al usuario.
            //listaCantantes.pedirYAgregarUnCantante();
            System.out.println("Ingrese el Nombre del Cantante. ");
            auxRespuesta = entrada.pedirEntrada();
            listaCantantes.addNombre(entrada.getEntrada());
            // Listado de cantantes.
            listaCantantes.listarCantantes();

            // Consulta si desea seguir ingresando cantantes.
            System.out.println("¿Desea continuar ingresando cantantes famosos?: (S/N)");
            auxRespuesta = entrada.pedirEntrada();
        } while (auxRespuesta.equalsIgnoreCase("S"));
    }

}
clase entrada del teclado
Código: [Seleccionar]
package ejercicioscu00666eduardoc;

import java.util.Scanner;

public class EntradaDeTeclado {

    private String entradaTeclado; //Variable de instancia (campo) de la clase

    // Constructor.
    public EntradaDeTeclado() {
        entradaTeclado = "";
        //pedirEntrada(); //Esto es una llamada a un método interno. Al crear un objeto ejecutamos el método
    } //Cierre del constructor

    // Función interna de la clase en la que recibe un texto ingresado por teclado del usuario.
    public String pedirEntrada() {  //Método de la clase         
        Scanner entradaEscaner = new Scanner(System.in);
        entradaTeclado = entradaEscaner.nextLine();
        return entradaTeclado;
    }

    // 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();
    }

}
clase lista cantante famosos
Código: [Seleccionar]
package ejercicioscu00666eduardoc;

import java.util.ArrayList; // clase utilizada para el uso de ArrayList.

public class ListaCantantesFamosos {

    // private String nombreDeLaLista;
    private ArrayList<String> listaCantantesFamosos;

    public ListaCantantesFamosos() {         // Constructor.
        //nombreDeLaLista = nombre;
        this.listaCantantesFamosos = new ArrayList<String>(); // Crea objeto del tipo ArrayList.
        listaCantantesFamosos.add("Madonna");
        listaCantantesFamosos.add("Sting");
        listaCantantesFamosos.add("Carlos Gardel");
    }

    // Agregar elemento a la lista.
    public void addNombre(String valor_nombre) {
        listaCantantesFamosos.add(valor_nombre);

    }

    // Getter tamaño de lista.
    public int getTamannoLista() {
        return listaCantantesFamosos.size();
    }

    //  Getter nombres.
    public String getNombreCantante(int posicion) {
        return listaCantantesFamosos.get(posicion);
    }

    // Listar cantantes, usando un for extendido.
    public void listarCantantes() {
        System.out.println("La lista ha quedado formada por " + this.getTamannoLista() + " elementos");
        int i = 0;
        for (String nombreCantantes : listaCantantesFamosos) {
            System.out.println("Elemento " + (i + 1) + ": " + nombreCantantes);
            i++;
        }
    }

    /*public void pedirYAgregarUnCantante() {
        System.out.println("Por favor, ingrese el nombre de un cantante famoso: ");
        EntradaDeTeclado entrada1 = new EntradaDeTeclado();
        this.addNombre(entrada1.getEntrada());
    }*/

}

eduardoc

  • Principiante
  • **
  • Mensajes: 50
    • Ver Perfil
Re:Ejercicio: (CU00666B) - El for extendido o bucles for each en Java.
« Respuesta #4 en: 05 de Julio 2016, 23:48 »
Hola DRANXZ88, qué tal?

Muchísimas gracias!

Ahora me quedó muy claro!!!

Saludos,
Edu.

 

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