Autor Tema: El for extendido o bucles for each en Java. Ejercicio ejemplo resuelto CU00666B  (Leído 3880 veces)

Alber

  • Sin experiencia
  • *
  • Mensajes: 11
    • Ver Perfil
Hola a todos. Aquí dejo resuelto el ejercicio sobre el tema CU00666B del tutorial básico de programación Java.

Creo que el código resuelve bien los problemas que plantea el ejercicio pero hay algo que no se resolver. y agradecería vuestra ayuda.

Según el código, salgo del bucle con la palabra "fin" y el problema que tengo es que me lo añade como si fuese un cantante mas..no se como puedo hacer para que la lista no incluya la palabra "fin".

Gracias de antemano. Un saludo.

Código: [Seleccionar]
import java.util.ArrayList;
 public class ListaCantantesFamosos{
    private ArrayList<String>cantantesFamosos;
 
   
    public ListaCantantesFamosos(){
         cantantesFamosos=new ArrayList<String>();
         cantantesFamosos.add("B.B.King");
         cantantesFamosos.add("Aretha Franklin");
         cantantesFamosos.add("Katie Melua");
       
        }
    public int getTamaño(){return cantantesFamosos.size();}
   
    public void addNombre(String valor_nombre){cantantesFamosos.add(valor_nombre);}
   
    public void ExtraercantantesFamosos(){
        for(String nombre:cantantesFamosos){System.out.println(nombre);}
    }
   


Y la clase main:

Código: [Seleccionar]
public class TestListaCantantesFamosos{
 
 
   
   public static void main(String[]args){
       ListaCantantesFamosos cantantesFamosos=new ListaCantantesFamosos();
       Scanner entradaEscaner=new Scanner(System.in);
       System.out.println("La lista contiene los sigüientes cantantes: ");
       cantantesFamosos.ExtraercantantesFamosos();
       System.out.println("Introduzca un nuevo cantante");
       cantantesFamosos.addNombre(entradaEscaner.nextLine());
       System.out.println("Ahora la lista contiene los sigüientes cantantes: ");
       cantantesFamosos.ExtraercantantesFamosos();
       
     
      Scanner nuevocantante=new Scanner(System.in);
      String entrada="";
     
       while(!"fin".equalsIgnoreCase(entrada)){
         System.out.println("Puede introducir un nuevo cantante: (escriba \"fin\" para finalizar)");
         entrada=nuevocantante.next();
         cantantesFamosos.addNombre(entrada);
         }
       
       System.out.println("El programa ha terminado y la lista queda compuesta por: ");
         cantantesFamosos.ExtraercantantesFamosos();
       
    }
}

Añado enlace del tema:
https://www.aprenderaprogramar.es/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&Itemid=188
« Última modificación: 16 de Agosto 2017, 18:07 por Alex Rodríguez »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Buenas Alber.


El ejercicio es correcto.

Para solucionar tu duda puedes añadir lo siguiente dentro del bucle while:

Código: [Seleccionar]
if (!entrada.equals("fin")) {
cantantesFamosos.addNombre(entrada);
}

Saludos.  ;D

Alber

  • Sin experiencia
  • *
  • Mensajes: 11
    • Ver Perfil
Hola pedro,gracias por tu respuesta, pero me sigue dando errores este código,de hecho ahora me duplica las entradas.
también he detectado que hay otro error mas ,que es que al hacer la entrada de un nombre compuesto me imprime dos veces la linea `print :-[
Seguiré revisándolo a ver si consigo solucionarlo.
un saludo

Alber

  • Sin experiencia
  • *
  • Mensajes: 11
    • Ver Perfil
aquí dejo el código revisado

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


public class TestListaCantantesFamosos{
 
 
   
   public static void main(String[]args){
       ListaCantantesFamosos cantantesFamosos=new ListaCantantesFamosos();
       Scanner entradaEscaner=new Scanner(System.in);
       System.out.println("La lista contiene los sigüientes cantantes: ");
       cantantesFamosos.ExtraercantantesFamosos();
       System.out.println("Introduzca un nuevo cantante");
       cantantesFamosos.addNombre(entradaEscaner.nextLine());
       System.out.println("Ahora la lista contiene los sigüientes cantantes: ");
       cantantesFamosos.ExtraercantantesFamosos();
       
       Scanner nuevocantante=new Scanner(System.in);
       String entrada="";
     
       while(!"fin".equalsIgnoreCase(entrada)){
         System.out.println("Puede introducir un nuevo cantante: (escriba \"fin\" para finalizar)");
         entrada=nuevocantante.next();
       
              if (!entrada.equalsIgnoreCase("fin")) {
           cantantesFamosos.addNombre(entrada);
               }
         }
       
           
       
       System.out.println("El programa ha terminado y la lista queda compuesta por: ");
         cantantesFamosos.ExtraercantantesFamosos();
       
    }
}   

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Buenas.

Se me pasó comentarte que debes usar el método nextLine() y no el método next(), puesto que este si encuentra un espacio en blanco lo toma como fin de la cadena introducida.

Cambia esta línea:
Código: [Seleccionar]
entrada=nuevocantante.next();
Por esta otra:
Código: [Seleccionar]
entrada=nuevocantante.nextLine();
Saludos. ;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".