Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: @dib_vz en 08 de Diciembre 2014, 05:22

Título: (CU00665B) Clase ArrayList y pedir datos por teclado con Scanner en Java
Publicado por: @dib_vz en 08 de Diciembre 2014, 05:22
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!
Título: Re:(CU00665B) Clase ArrayList
Publicado por: Ogramar 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!
Título: Re:(CU00665B) Clase ArrayList
Publicado por: @dib_vz 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();
    }
}
Título: Re:(CU00665B) Clase ArrayList
Publicado por: Ogramar 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!