Autor Tema: Ejercicio resuelto for extendido (for each) en Java CU00666B  (Leído 3106 veces)

jupertivo

  • Sin experiencia
  • *
  • Mensajes: 29
  • Aprendiendo y más allá
    • Ver Perfil
Hola a tod@s. A continuación transcribo el código del ejercicio propuesto.

Clase TestListaCantantesFamosos, con el 'main':

Código: [Seleccionar]
public class TestListaCantantesFamosos {
    public static void main (String [ ] args) {
        String nombreDeLaLista="\"Cantantes famosos\"";
        EntradaDeTeclado entrada;
        int veces=1;
        System.out.println("Empezamos el programa. Para salir, pulse 'return'");
        ListaCantantesFamosos lista=new ListaCantantesFamosos(nombreDeLaLista);
        System.out.println("La lista se llama: "+nombreDeLaLista);
        lista.listarTodosLosNombres();
        do{  //Bucle do-while para ingresar datos en la lista
            if (veces==1) {System.out.println("\nIntroduzca un/a cantante más:");}
                else if (veces==2) {
                    System.out.println("\nIntroduzca más cantantes. Para salir, pulse 'return'");
                    veces++; }
            entrada=new EntradaDeTeclado();
            if(entrada.getContinuar()) {//el 'if' evita que el 'Return' último sea añadido a la lista
                lista.addNombre(entrada.getEntrada());
                if(veces==1) {lista.listarTodosLosNombres();veces++;}}}
        while(entrada.getContinuar()); ////Si pulso 'Return', se acabará la introducción de datos
        lista.listarTodosLosNombres();} }


Clase ListaCantantesFamosos:


Código: [Seleccionar]
import java.util.ArrayList;
public class ListaCantantesFamosos { //Clase que representa una lista de nombres manejada con la clase ArrayList de Java
    private String nombreDeLaLista; //Establecemos un atributo nombre de la lista
    private ArrayList<String>listadenombres; //Declaramos un ArrayList que contiene objetos String
    public ListaCantantesFamosos(String nombre) { //Constructor: crea una listainicial de 3 cantantes
        nombreDeLaLista=nombre;
        listadenombres=new ArrayList<String>();
        listadenombres.add("Aretha Franklin");listadenombres.add("Etta James");listadenombres.add("Nina Simone");
    }//Creamos el objeto de tipo ArrayList
    public void addNombre(String valor_nombre) {listadenombres.add(valor_nombre);}
    public void listarTodosLosNombres() {
        int i=1;
        if (listadenombres.size()!=0) {
           System.out.println("\nLa lista está formada por "+listadenombres.size()+" cantantes");
           //System.out.println("Mostramos todos los nombres con un ciclo for-each");   
           for (String nombre:listadenombres) { //Ciclo for-each
               System.out.println("Cantante "+i+": "+nombre);i++;} }
        else {System.out.println("La lista está vacía");} } }


Clase EntradaDeTeclado:

Código: [Seleccionar]
import java.util.Scanner;
public class EntradaDeTeclado {
    private String entradaTeclado;
    boolean continuar=true;
    public EntradaDeTeclado() { //Constructor
        entradaTeclado="";
        pedirEntrada(); } //Al crear un objeto, se ejecuta este método
    public void pedirEntrada() {
        Scanner entradaEscaner=new Scanner(System.in);
        entradaTeclado=entradaEscaner.nextLine();
        if (entradaTeclado.length()==0) {continuar=false;} }
        //Si pulso 'Return', no se introducirán más datos
    public boolean getContinuar() {return continuar;}
    public String getEntrada() {return entradaTeclado;} }


Gracias por vuestra atención. Saludos.
« Última modificación: 16 de Abril 2015, 09:15 por Ogramar »
Descubrir y enmendar los pequeños errores ayuda a no cometer los grandes

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Ejercicio resuelto for extendido (for each) en Java CU00666B
« Respuesta #1 en: 16 de Abril 2015, 09:24 »
Hola jupertivo debajo te comento un problema que he observado

La idea de if (entradaTeclado.length()==0) {continuar=false;} me parece bastante buena, así evitas que se pueda pulsar enter sin que se introduzcan datos

Has añadido los nombres en el constructor en

Código: [Seleccionar]
    public ListaCantantesFamosos(String nombre) { //Constructor: crea una listainicial de 3 cantantes
        nombreDeLaLista=nombre;
        listadenombres=new ArrayList<String>();
        listadenombres.add("Aretha Franklin");listadenombres.add("Etta James");listadenombres.add("Nina Simone");
    }//Creamos el objeto de tipo ArrayList

Esto puede hacerse, aunque otra opción era hacerlo fuera del constructor.

La cosa a corregir que parece un fallo: si introduzco cantantes llega un momento en que no me deja introducir más, por ejemplo

Citar
Empezamos el programa. Para salir, pulse 'return'
La lista se llama: "Cantantes famosos"

La lista está formada por 3 cantantes
Cantante 1: Aretha Franklin
Cantante 2: Etta James
Cantante 3: Nina Simone

Introduzca un/a cantante más:
Jim Morrison

La lista está formada por 4 cantantes
Cantante 1: Aretha Franklin
Cantante 2: Etta James
Cantante 3: Nina Simone
Cantante 4: Jim Morrison

Introduzca más cantantes. Para salir, pulse 'return'
Bono


La lista está formada por 5 cantantes
Cantante 1: Aretha Franklin
Cantante 2: Etta James
Cantante 3: Nina Simone
Cantante 4: Jim Morrison
Cantante 5: Bono


Después de introducir Bono ya no me deja introducir más cantantes.

Salu2

jupertivo

  • Sin experiencia
  • *
  • Mensajes: 29
  • Aprendiendo y más allá
    • Ver Perfil
Re:Ejercicio resuelto for extendido (for each) en Java CU00666B
« Respuesta #2 en: 16 de Abril 2015, 12:55 »
Hola Ogramar. Gracias por tus comentarios y puntualizaciones. Lo de inicializar una lista, p.e., tenía entendido que era mejor hacerlo en el constructor. Igual estoy confundido, que no me extrañaría, ya que son muchos conceptos y, a veces, se atropellan unos a otros.

Sí, con la línea siguiente de la clase EntradaDeTeclado, se detecta si se ha pulsado 'Return'.

Código: [Seleccionar]
if (entradaTeclado.length()==0) {continuar=false;}

Aprovecho eso para salir de la introducción de cantantes en la lista en cualquier momento, y para evitar añadir el último 'Return' en la misma.

Respecto a que no te deja introducir más cantantes después de 'Bono', no sé. He vuelto a ejecutar el código y, a mí, si me deja metar cantantes hasta que pulso 'Return' para salir. Lo único es que el mensaje en pantalla "Introduzca más cantantes. Para salir, pulse 'return' ".ya no vuelve a salir después de introducir el quinto cantante. Diseñé el código así para evitar más líneas en pantalla cada vez que introducía un cantante. Lo único que aparece en pantalla es el cursor parpadeando en la siguiente línea.

Gracias por tu atención

             
« Última modificación: 16 de Abril 2015, 20:49 por Ogramar »
Descubrir y enmendar los pequeños errores ayuda a no cometer los grandes

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Ejercicio resuelto for extendido (for each) en Java CU00666B
« Respuesta #3 en: 16 de Abril 2015, 20:50 »
Sí, era eso lo que pasaba... al no aparecer el mensaje de que introdujera otro dato veía el cursor parpadeando y pulsaba enter y el programa terminaba, por eso me pareció que era un error  ;D

 

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