Autor Tema: (CU00665B) Clase ArrayList y pedir datos por teclado con Scanner en Java  (Leído 16955 veces)

@dib_vz

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
Aqui os dejo un nuevo ejercicio del curso de java. He intentado ir siguiendo los consejos y recomendaciones que a lo largo del curso me habeis ido comentando en los ejercicios.

He creado una clase ListaCantantesFamosos para crear objetos ArrayList

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

public class ListaCantantesFamosos {
   
    private String nombreListaCantantes;
    private ArrayList<String> listaCantantes;
   
    //constructor
    public ListaCantantesFamosos () {
       
        nombreListaCantantes = "CANTANTES FAMOSOS";
        listaCantantes = new ArrayList<String>();
        listaCantantes.add("Paulina Rubio");
        listaCantantes.add("Shakira");
        listaCantantes.add("Beyonce");
    }
   
    public void añadirNombre (String nombreCantante) {
       
        listaCantantes.add(nombreCantante);
    }
   
    public ArrayList<String> getListaCantantes() {
       
        return listaCantantes;
    }
   
    public int getTamaño() {
       
        return listaCantantes.size();
    }
   
    public String getNombreLista() {
       
        return nombreListaCantantes;
    }
   
    //Con este metodo se imprime la lista en pantalla en formato columna
    public void imprimirLista () {
       
        System.out.println("\n" + getNombreLista() + "\n");
        for (int i=0; i<getTamaño(); i++) {
            System.out.println((i+1) + " --- " + getListaCantantes().get(i));
        }
    }
}

Posteiormente he creado la clase con el metodo main para inicializar el programa y todos los procesos que piden en el ejercicio.

Código: [Seleccionar]
public class TestCantantes {
   
    public static void main (String[] args) {
       
        System.out.println("Esta es una lista de cantantes famosos");
 
        ListaCantantesFamosos lista = new ListaCantantesFamosos();
       
        lista.imprimirLista();
       
        boolean lanzador = true;
        while (lanzador==true) {
            System.out.println("\n¿Desea añadir un nuevo nombre a la lista?(y/n)");
            EntradaPalabras confirmador = new EntradaPalabras();
           
            if (confirmador.getPalabra().equalsIgnoreCase("y")) {
                System.out.println("\nPor favor, introduzca un nuevo cantante:");
                EntradaPalabras nombre = new EntradaPalabras();
                lista.añadirNombre(nombre.getPalabra());
            } else {
                lanzador = false;
                System.out.println("\nSu lista definitiva esta compuesta por " + (lista.getTamaño()) + " referencias de:");
                lista.imprimirLista();
                System.out.println("\nEspero que haya disfrutado del programa.\n\nDesarrollado por @dib_vz");
            }
        }
    }
}

Se hace referencia a otra clase EntradaPalabras, que es la que cree en otros ejercicios para utilizar la clase Scanner

Gracias por todo y un saludo!
« Última modificación: 11 de Diciembre 2014, 08:57 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:(CU00665B) Clase ArrayList
« Respuesta #1 en: 10 de Diciembre 2014, 07:55 »
Hola, para poder revisar el ejercicio es necesario todo el código que se utilice en él, aunque sean clases auxiliares o clases que hayan participado en otros ejercicios. Disponiendo de todo el código podemos compilar y ver exactamente el código, mientras que faltando algunas clases tendríamos que buscarlas para poder compilar. Te lo comento por "Se hace referencia a otra clase EntradaPalabras, que es la que cree en otros ejercicios para utilizar la clase Scanner"

Pega el código de esa clase que falta para poder revisarlo.

Salu2!

@dib_vz

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 11
    • Ver Perfil
Re:(CU00665B) Clase ArrayList
« Respuesta #2 en: 10 de Diciembre 2014, 12:38 »
Tienes razon, aqui esta la clase que falta:

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

public class EntradaPalabras {

    private String palabra;

    //constructor
    public EntradaPalabras() {

        palabra="";
        pedirPalabra();
        quitarEspacio();
    }

    //metodo para pedir una entrada de teclado
    public void pedirPalabra() {

        Scanner entradaEscaner = new Scanner(System.in);
        palabra = entradaEscaner.nextLine();
    }

    //este metodo analiza los primeros caracteres para elimnar los espacios antes de la palabra
    public void quitarEspacio() {

        for (int i=0; i<getLongitud(); i++) {

            if (palabra.substring(0,1).equals(" ")) {
                palabra=palabra.substring(1,getLongitud());
            }else {
                palabra=palabra;
            }
        }
    }

    public String getPalabra() {

        return palabra;
    }

    public int getLongitud() {

        return palabra.length();
    }
}

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:(CU00665B) Clase ArrayList
« Respuesta #3 en: 10 de Diciembre 2014, 14:30 »
Ahora sí he podido compilarlo :)



Viendo las clases.

En la clase EntradaPalabras.

El método:

Código: [Seleccionar]
    //este metodo analiza los primeros caracteres para elimnar los espacios antes de la palabra
    public void quitarEspacio() {

        for (int i=0; i<getLongitud(); i++) {

            if (palabra.substring(0,1).equals(" ")) {
                palabra=palabra.substring(1,getLongitud());
            }else {
                palabra=palabra;
            }
        }
    }

En el comentario dice que quita los espacios antes de la palabra, pero en realidad no parece que funcione bien siempre. Por ejemplo si introduzco 7 espacios y el nombre ana no elimina todos los espacios. Sugerencia: más que hacer una modificación de la palabra al mismo tiempo que la recorres, sería posiblemente mejor recorrer la palabra original por un lado y crear la nueva palabra (sin espacios) por otro para evitar estar recorriendo y modificando al mismo tiempo.

En la clase ListaCantantesFamosos: preferible no usar eñes en los nombres de variables y métodos (por ejemplo mejor addNombre que añadirNombre). Aunque esté permitido, puede darte problemas a la larga.

Clase TestCantantes: la veo muy bien planteada y bien compacta.

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