Autor Tema: Aprender a programar desde cero / Ejercicio CU00665B Scanner y ArrayList Java  (Leído 4787 veces)

lobo

  • Sin experiencia
  • *
  • Mensajes: 11
    • Ver Perfil
Esta en una solución al ejercicio C00665B con ligeras variantes que he introducido para ir explorando un poco las posibilidades.



CLASE QUE PIDE LA ENTRADA POR TECLADO DE LOS ELEMENTOS DE UNA LISTA DINÁMICA:


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

public class EntradaTec {
   
    String entradaTec; //Declaración de objeto String para guardar la cadena tecleada
       
    public EntradaTec(){ //Constructor
        entradaTec="";         
            }
 
    public String pedirEntrada(){
        System.out.println("Escriba un nombre (o nada para terminar) y pulse ENTER");
        Scanner entradaEsc = new Scanner(System.in);
        entradaTec = entradaEsc.nextLine();             
        return entradaTec;
    }
       
        public String getEntradaTec(){
        return entradaTec;
    }
}



CLASE QUE CREA UN ArrayList CON LOS String INTRODUCIDOS MEDIANTE LA CLASE ANTERIOR Y MUESTRA SU LISTADO FORMATEADO:

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

public class Lista{
   
    private String nombre;//Atributo o campo para los elementos de la lista
    private ArrayList<String> lista = new ArrayList<String>(); //Creación de un objeto array para objetos tipo String
    private String entrada;

    public Lista (){
    }
   
    public void addNombre(){
        EntradaTec entrada = new EntradaTec();
        do {
            nombre = entrada.pedirEntrada();
            lista.add(nombre);
        }   while(nombre.length() >0);
        lista.remove("");//Borra el último elemento de la lista que es la cadena vacía de cierre 
        System.out.print("Se ha cerrado la lista");       
    }
   
    public void addNombre(String nombre){
        lista.add(nombre);
    }
   
    public void listado (){
        int i = 0;
        while(i < lista.size()){           
            String elemento = lista.get(i);
            switch (i) {
                case 0:  System.out.print("Elementos de la lista: ");System.out.print(elemento); break;               
                default: System.out.print(", " + elemento); break;
            }
            i++;
        }
        System.out.println(".");
    }
}



CLASE main QUE INICIA LA EJECUCIÓN DEL PROGRAMA Y AÑADE FORMATO A LA SALIDA POR CONSOLA:


Código: [Seleccionar]
public class ManejoLista{
   
    public static void main (String [] args){
        Lista lista = new Lista();
        System.out.println("");
        lista.addNombre();
        System.out.println("");
        System.out.println("");
        System.out.println("*********************************");
        System.out.println("");
        lista.listado();               
    }
}
« Última modificación: 11 de Octubre 2014, 10:36 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola lobo
Tu código es, conciso y eficiente con formateo incorporado. OK, perfecto.

Aparte de tu ejercicio quiero comentarte lo siguiente:
En lugar de colocar tu código directamente en la ventana del mensaje, usa el botón insertar código (contiene el símbolo de la almohadilla #) y en medio de las etiquetas [cod]..aquí va el código..[/cod]
Esto es para facilitar a quién quiera ver y probar tu código seleccionar y copiar éste, si no, hemos de tener cuidado al seleccionar el código usando cualquier otro método.
-------------
Empiezas el mensaje diciendo que has introducido ligeras variantes.
Las variantes son buenas. Son bien recibidas. Se aprenden cosas nuevas.

Las diferencias que destaco de tu ejercicio con el que se propone son:
Se proponen unos nombres para las clases.
Y tú has escogido tus propios nombres.

En el enunciado del ejercicio se dice que la clase que tu bautizas 'lista', al ser inicializada contenga los nombres de tres cantantes famosos en su ArrayList.
Cosa que tú has obviado.

Estas diferencias no las puedo tratar como variantes que aporten mejoras sustantivas.

En mi opinión, la variante o variantes a destacar son, la simplicidad (por escueta) y eficiencia del código que ya se ha reconocido.

En el foro aceptamos las variantes sobre los ejercicio propuestos. Es más, nos gustan las variantes, aportan nuevos puntos de vista.
Pero, quiero pedirte que junto con las variantes (si las hay),  incluyas el ejercicio con sus especificaciones propuestas.
-------------
Otro comentario:
En tu clase EntradaTec, en el método
public String pedirEntrada()
incluyes un mensaje que se muestra antes de escanear el teclado

En este ejercicio, este mensaje es procedente.
Pero cuando hagas otro programa donde tengas que escanear el teclado. ¿Qué vas ha hacer. Crear otra clase EntradaTec, o modificar esta?
Ninguna de estas opciones es deseable. Esta clase tiene un cometido importante, escanear el teclado y devolver su captura, eso, solo eso. De esta forma, esta clase la podrás aprovechar en cualquier proyecto.

Lo correcto en nuestros programas, es que el main que dirije el desarrollo del programa, dé los mensajes apropiados para cada caso. Y las clases accesorias se dediquen a hacer su trabajo (a la chita callando), como si no estuvieran ahí.
No descarto que algunas clases necesitan enviar sus propios mensajes, pero no es lo habitual.

Si me aceptas el símil. El main es el responsable del gobierno que da las directrices de actuación y las conferencias de prensa. Y las otras clases del proyecto son los ministros y funcionarios que se dedican cada uno a realizar únicamente su función.

Eso es todo. Saludos.

lobo

  • Sin experiencia
  • *
  • Mensajes: 11
    • Ver Perfil
Gracias toni_apr por tu exhaustivo análisis del ejercicio. Tomo nota de tus observaciones.

Si he decidido ir un poco por libre en este ejercicio ha sido, en parte, por el echo de que ya se habían presentado diversas soluciones ajustadas al enunciado.

Como variantes más notables yo destacaría:

1) Posibilidad de introducir cualquier número de nombres en el ArrayList indicando el final de las entradas con un ENTER "en blanco". Esto creo que es importante pues el ArrayList se caracteriza por su carácter dinámico en cuanto a dimensión.

2) Mostrar el listado formateado.

Espero no sea considerado como un menosprecio de los ejercicios propuestos en el curso, el cual me parece excelente dentro de su nivel. Yo soy nuevo en java (aunque no en programación, pues he creado aplicaciones de cierta envergadura en Visual Basic y en Logo), y he elegido este curso (entre la inmensa cantidad de materiales accesibles por Internet) para aprender a dar los primeros pasos en java.

Me he tomado la libertad de no seguir estrictamente el enunciado para aportar algo al foro, con el que me siento en deuda, porque sobre este ejercicio, reitero, ya se habían presentado soluciones perfectas. Para comprobar si yo sería capaz de hacerlo por mi mismo, decidí hacer una versión algo distinta, y al ver que funcionaba bien me pareció oportuno publicarla, Eso es todo.

Saludos a todos.

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola lobo
Si decides ir por libre como dices, es elección tuya, tan buena como otras.

En este foro se recibe código propio de cada usuario pidiendo consejo sobre las dudas que se le plantean.
Y entre los moderadores, colaboradores y resto de usuarios se pueden dar opiniones y algunas veces soluciones a los problemas planteados.

Esa, es parte de la filosofía de este foro, de la que también forma parte atender a los usuarios que siguen el curso por internet.
Para lo cual, en los comentarios a sus ejercicios, marcamos deficiencias o defectos en la composición del ejercicio, sin desmerecer los cambios (que también quiero llamar variaciones) que aporten novedad o punto de vista nuevo sobre el ejercicio.

No considero menosprecio por tu parte, el que tu código sea más libre que el de la mayoría de los otros seguidores del curso, (hay de todo en la viña del Señor).

Piensa que si hemos de comentar un ejercicio, no podemos hacer un mundo nuevo cada vez que otro alumno presenta el mismo ejercicio.
En principio hemos de partir de lo que se especifica en el enunciado del ejercicio, y teniendo eso como base y los conceptos que ya se han dado en las lecciones anteriores valorar el trabajo.

Tanto si continúas por libre, o no, nos complacerá recibir tus aportes, de los que esperamos aprender, y si cabe, despejarte alguna duda.

Saludos

 

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