Autor Tema: Java. Clase ArrayList del api Java. Métodos add, size,... Ejercicio CU00665B  (Leído 3689 veces)

barriway

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 20
    • Ver Perfil
Solución propuesta para el ejercicio de listas CU00665B.


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

public class EntradaTeclado{

    private String entrada;
    Scanner scaner;
   
    public EntradaTeclado(){
        scaner = new Scanner(System.in);
        entrada = scaner.nextLine();
    }

    public String getEntrada(){
        return entrada;
    }

    public void setEntrada(){
        entrada = scaner.nextLine();
    }
}


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

public class ListaCantantesFamosos{
    private ArrayList<String> listaCantantes;

    public ListaCantantesFamosos(){
        listaCantantes = new ArrayList<String>();
        listaCantantes.add("Joaquin Sabina");
        listaCantantes.add("Carlos Cano");
        listaCantantes.add("David Broza");
    }

    public String getCantante(int posicion){
        if(posicion>=0 && posicion<listaCantantes.size()){
            return listaCantantes.get(posicion);
        }else{
            return "No existe cantante para esa posición de la lista";
        }
    }
   
    public void addCantante(String nombreCantante){
        listaCantantes.add(nombreCantante);
    }
   
    public void removeCantante(int posicion){
         if(posicion>=0 && posicion<listaCantantes.size()){
            listaCantantes.remove(posicion);
        }
    }
   
    public int getTamaño(){
        return listaCantantes.size();
    }
}


Código: [Seleccionar]
public class Test{
   
    public static void main(String arg[]){
       
        System.out.print("Dame el nombre de un cantante famoso : ");
        EntradaTeclado entrada1 = new EntradaTeclado();
        System.out.print("Dame un segundo nombre de cantante famoso : ");
        EntradaTeclado entrada2 = new EntradaTeclado();
       
        ListaCantantesFamosos listaCantantes = new ListaCantantesFamosos();
        listaCantantes.addCantante(entrada1.getEntrada());
        listaCantantes.addCantante(entrada2.getEntrada());
       
        System.out.println("El contenido de la lista de cantantes famosos es el siguiente :");
        System.out.println(listaCantantes.getCantante(0));
        System.out.println(listaCantantes.getCantante(1));
        System.out.println(listaCantantes.getCantante(2));
        System.out.println(listaCantantes.getCantante(3));
        System.out.println(listaCantantes.getCantante(4));
        System.out.println("Fin del programa");
    }
}

Un saludo.
« Última modificación: 16 de Julio 2015, 10:55 por Alex Rodríguez »

RaGa

  • Moderador Global
  • Intermedio
  • *******
  • APR2.COM
  • Mensajes: 234
    • Ver Perfil
Hola!

Estuve revisando tu ejercicio. En general lo veo bien.
Sin embargo me gustaría hacer algunas observaciones para mejorar el código.

Respecto a la clase EntradaTeclado. La idea de una clase que cree objetos que manejen los datos provenientes del teclado está muy bien. Sin embargo creo que su codificación podría hacerse más eficiente.
Igualmente renombraría también la clase por un nombre que sea más acorde a lo que hace. Por ejemplo llamaría a esta clase GestionadorEntradasTeclado.
Reescribo esta clase de la manera en que pienso sería más eficiente:

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

public class GestionadorEntradasTeclado{

    Scanner scaner;
   
    public GestionadorEntradasTeclado(){
        scaner = new Scanner(System.in);
    }

    public String recogerCadena(){
        String entrada = scaner.nextLine();
        return entrada;
    }

}

fíjate que se define solo un método recogerPalabra(). Este método lo que hace es devolver una cadena (tipo String) cada vez que se la invoca.

De esta manera, podríamos reescribir la clase Test de la siguiente manera:

Código: [Seleccionar]
public class Test{
   
    public static void main(String arg[]){
       
        ListaCantantesFamosos listaCantantes = new ListaCantantesFamosos();
       
        GestionadorEntradasTeclado teclado = new GestionadorEntradasTeclado();
        System.out.print("Dame el nombre de un cantante famoso : ");
        listaCantantes.addCantante(teclado.recogerCadena());
        System.out.print("Dame un segundo nombre de cantante famoso : ");
        listaCantantes.addCantante(teclado.recogerCadena());
 
        System.out.println("El contenido de la lista de cantantes famosos es el siguiente :");
        for (int i=0; i<listaCantantes.getTamaño();i++){
            System.out.println(listaCantantes.getCantante(i));
        }

        System.out.println("Fin del programa");
    }
}

Como puedes ver, una diferencia respecto de la versión anterior, es que declaramos solo un objeto tipo GestionadorEntradasTeclado, y lo usamos dos veces.
El método teclado.recogerCadena() devuelve un String que es el nombre del cantante. Y a su vez ese String es el parámetro del método listaCantantes.addCantante que lo agrega a la lista.

Fíjate que reutilizamos el recurso 'teclado'. Si tuviéramos que ingresar 100 cantantes, utilizaríamos siempre el mismo objeto.

Una última cosa: la letra 'ñ' castellana es preferible no usarla cuando programamos. Por lo tanto al método getTamaño() bien podríamos renombrarlo por getTamanno o getTamanio.

Analízalo y cualquier duda acá estamos para revisarlo nuevamente.

barriway

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 20
    • Ver Perfil
Ok RaGa. Muchas gracias

 

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