Autor Tema: Ejemplo do while Java repetir un proceso hasta que se cumpla condición CU00665B  (Leído 12121 veces)

jupertivo

  • Sin experiencia
  • *
  • Mensajes: 29
  • Aprendiendo y más allá
    • Ver Perfil
Hola a tod@s. Os transcribo los códigos del ejercicio propuesto en esta lección. Me ha costado depurarlo para dejarlo como está. Quería que me pidiera cantantes hasta una indicación para finalizar. Pero ahora funciona (por el momento ;D). Me ha servido de mucho los comentarios en https://www.aprenderaprogramar.com/foros/index.php?topic=2220.msg10706#msg10706 .


Primero la clase TestListaCantantesFamosos, donde está el 'main':

Código: [Seleccionar]
public class TestListaCantantesFamosos {
    public static void main (String [ ] args) {
        EntradaDeTeclado entrada;
        System.out.println ("Empezamos el programa. Para salir, pulse 'return'");
        ListaCantantesFamosos lista = new ListaCantantesFamosos("Cantantes introducidos por usuario");
        do{
            System.out.println ("Por favor introduzca un/a cantante:");
            entrada=new EntradaDeTeclado();
            lista.addNombre (entrada.getEntrada()); }
        while(entrada.getContinuar()); ////Si pulso 'Return', 'while' será falso y se acabará la introducción de datos
        System.out.println ("La lista ha quedado formada por "+(lista.getTamaño()-1)+" cantantes");
        for (int i=0;i<lista.getTamaño()-1;i++) {
            System.out.println ("Cantante "+(i+1)+": "+lista.getNombre(i));} } }



A continuación, la clase ListaCantantesFamosos, para crear un ArrayList:

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 lista de nombres vacía
        nombreDeLaLista=nombre;
        listadenombres=new ArrayList<String>();
        System.out.println ("La lista se llama: "+nombreDeLaLista);
    }//Creamos el objeto de tipo ArrayList
    public void addNombre (String valor_nombre) {listadenombres.add (valor_nombre);}
    public String getNombre (int posicion) {
        if (posicion>=0 && posicion<listadenombres.size()) {
            return listadenombres.get(posicion);}
        else {return "No existe nombre para la posición solicitada";} }
    public int getTamaño () {return listadenombres.size();} }


Por último, la 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', saldré del programa
    public boolean getContinuar () {return continuar;}
    public String getEntrada () {return entradaTeclado;} }


Saludos y gracias a tod@s.
« Última modificación: 13 de Abril 2015, 09:56 por Ogramar »
Descubrir y enmendar los pequeños errores ayuda a no cometer los grandes

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Hola jupertivo tu clase EntradaDeTeclado está bien planteada.

En la clase ListaCantantesFamosos tienes esto:

Código: [Seleccionar]
    public ListaCantantesFamosos (String nombre) { //Constructor: crea una lista de nombres vacía
        nombreDeLaLista=nombre;
        listadenombres=new ArrayList<String>();
        System.out.println ("La lista se llama: "+nombreDeLaLista);
    }//Creamos el objeto de tipo ArrayList

Si ves comentarios en otros hilos verás que se recomienda no incluir System.out.println dentro de constructores ni métodos porque la responsabilidad de un constructor es inicializar los atributos de un objeto, no debe hacer nada más que esto (en el caso de métodos, debe cumplir con su responsabilidad y nada más que eso).

En cambio aquí sí lo tienes bien planteado:
Código: [Seleccionar]
    public String getNombre (int posicion) {
        if (posicion>=0 && posicion<listadenombres.size()) {
            return listadenombres.get(posicion);}
        else {return "No existe nombre para la posición solicitada";} }

Este método devuelve un String, que puede ser el nombre de la lista, o si no existe un String que es un aviso de que no existe nombre para la posición solicitada.

Tu clase con el main está muy bien, en pocas líneas haces uso de los objetos y diriges el programa.

Supongo que te habrás dado cuenta de que aunque tu código funciona bien no has cumplido con lo que pedía el enunciado:

Citar
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, pida dos cantantes famosos más al usuario, los añada a la lista y muestre el contenido de la lista por pantalla.

Salu2

jupertivo

  • Sin experiencia
  • *
  • Mensajes: 29
  • Aprendiendo y más allá
    • Ver Perfil
Gracias Ogramar por tus comentarios.

Ya he quitado "System.out.println" del constructor de la clase "ListaCantantesFamosos" y lo he puesto en el 'main', insertando una función que devuelve el nombre de la lista en la 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 lista de nombres vacía
        nombreDeLaLista=nombre;
        listadenombres=new ArrayList<String>(); }//Creamos el objeto de tipo ArrayList
    public void addNombre (String valor_nombre) {listadenombres.add (valor_nombre);}
    public String getNombre (int posicion) {
        if (posicion>=0 && posicion<listadenombres.size()) {
            return listadenombres.get(posicion);}
        else {return "No existe nombre para la posición solicitada";} }
    public int getTamaño () {return listadenombres.size();}
    public String getNombreDeLaLista () {return nombreDeLaLista;}}



Código: [Seleccionar]
public class TestListaCantantesFamosos {
    public static void main (String [ ] args) {
        EntradaDeTeclado entrada;
        System.out.println ("Empezamos el programa. Para salir, pulse 'return'");
        ListaCantantesFamosos lista = new ListaCantantesFamosos("Cantantes introducidos por usuario");
        do{
            System.out.println ("Por favor introduzca un/a cantante:");
            entrada=new EntradaDeTeclado();
            lista.addNombre (entrada.getEntrada()); }
        while(entrada.getContinuar()); ////Si pulso 'Return', 'while' será falso y se acabará la introducción de datos
        System.out.println ("La lista se llama: "+lista.getNombreDeLaLista());
        System.out.println ("La lista ha quedado formada por "+(lista.getTamaño()-1)+" cantantes");
        for (int i=0;i<lista.getTamaño()-1;i++) {
            System.out.println ("Cantante "+(i+1)+": "+lista.getNombre(i));} } }


Respecto a que no he hecho lo pedido en el ejercicio, tienes toda la razón. Sucedió que me puse a hacerlo de la forma indicada, pero me picó la curiosidad por encontrar una forma que me fuera pidiendo datos hasta que yo decidiera lo contrario ;D.

Gracias de nuevo por vuestra atención, y hoy a tí en particular.

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

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Ya veo el cambio... Respecto a no adaptarse al enunciado del ejercicio, recomendamos seguir lo que dice el enunciado porque así es como se pueden comparar unas soluciones con otras y ver distintas ideas sobre cómo hacer una misma cosa. Si no se sigue el enunciado no se puede hacer esta comparación, aunque sí es cierto que también es recomendable "jugar" con el código, hacer distintas cosas, pruebas, variantes, etc. porque es la mejor forma de aprender.

Salu2

 

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