Autor Tema: Entrega CU00665B. Inconveniente al agregar un objeto a un ArrayList java.  (Leído 3580 veces)

Cabanota

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 26
    • Ver Perfil
Hola colegas. Estaba practicando sobre los ArrayList. Reutilice código para experimentar, para ver como funcionaban los métodos de la clase ArrayList y para hacer algo mas o menos diferente. Cree una clase donde tengo los métodos y otra donde esta el método main, que son las siguientes:

Clase con métodos.
Código: [Seleccionar]
import java.util.*;
/**
 * Write a description of class ListaNombres here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class ListaNombres{
    private String nombreDeLaLista;
    private ArrayList<String> listaDeNombres;
   
    public ListaNombres(String nombreDeLaLista){
        this.nombreDeLaLista = nombreDeLaLista;
        listaDeNombres = new ArrayList<String>();
    }
   
    public void addNombre(String nombre){
        listaDeNombres.add(nombre);
    }
   
    public String getNombreABuscar(int i){
        if(i >= 0 && i < listaDeNombres.size()){
            return listaDeNombres.get(i);
        }else{
            return "No se encuentra el nombre";
        }
    }
   
    public int getTamaño(){
        return listaDeNombres.size();
    }
   
    public void removerNombre(int i){
        if(i >= 0 && i < listaDeNombres.size()){
            listaDeNombres.remove(i);
        }else{
            System.out.println("Este nombre no existe.");
        }
    }
   
    public ArrayList<String> getListaDeNombres(){
        return listaDeNombres;
    }
}

Metodo main.
Código: [Seleccionar]
import java.util.*;
/**
 * Write a description of class TestListaNombres here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class TestListaNombres{
   
    public TestListaNombres(){
    }
   
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        ListaNombres listNombres = new ListaNombres("Amigos");
       
        System.out.print("¿Cuantos nombres desea ingresar?: ");
        int numIngresos = sc.nextInt();
       
        for(int i = 0; i < numIngresos; i++){
            System.out.print("Ingresas nombre numero " + (i+1) + ": ");
            String nom = sc.nextLine();
            listNombres.addNombre(nom);
        }
       
        System.out.println("En estos momentos en tamaño de su lista de nombre es de: " + listNombres.getTamaño());
       
   System.out.print(listNombres.getListaDeNombres());
    }
}

En la clase: TestListaNombres. Mi intención era agregar mas cosas, con la intención de utilizar todos los métodos de la otra clase, pero a medida que voy creando lo que hago lo voy probando. Y aquí es donde viene mi duda. Resulta, que en el programa, yo le pregunto al usuario cuantos nombres deseea agregar, haasta ahi todo bien. La cuestion viene despues, que cuando el programa entra en el for, para agregar nombre por nombre sucede algo extraño, que es esto:

Prueba de escritorio.

¿Cuantos nombres desea ingresar?: 3
Ingresas nombre numero 1: Ingresas nombre numero 2: nombre1
Ingresas nombre numero 3: nombre1
En estos momentos en tamaño de su lista de nombre es de: 3
[, nombre1, nombre1]


Cuando el usuario ingresa la cantidad de nombres (en este caso 3), cuando el programa procede a ingresar los nombres a guardar el la lista, no me deja ingresar el nombre numero 1, si no que de una me imprime para ingresar el nombre numero 2. y asi sucesivamente. Hice una prueba para que me mostrata por consola los nombre que tengo en mi lista. y preciso, en la lista, en mi posicion numero 0 (get(0)) aparece el dato como vacio y las otras posiciones si almacena su dato normalmente.

Intente arreglarlo de varias maneras, busque como solucionarlo y me di por vencido. Por eso recurro a ustedes, para ver si puede ayudarme, ya que no quiero quedar con la duda y la incertidumbre del por que ocurre esto.
Espero y me haya sabido explicar y puedan ayudarme. Estaría muy agradecido. De ante mano  muchas gracias.
« Última modificación: 02 de Noviembre 2014, 03:54 por Jorge lopez »

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
Re: Entrega CU00665B. Inconveniente al agregar un objeto a un ArrayList java.
« Respuesta #1 en: 02 de Noviembre 2014, 04:25 »
 Hola Cabanota!

Antes de comentar tu código, primero te aclaro dos puntos a tomar en cuenta en tus próximas publicaciones en los foros de aprenderaprogramar.com

1ro: Evita usar nombres de temas como: AYUDA!! o Error!! ext.. En su lugar, usa un nombre de tema descriptivo al problema con el cual necesitas ayuda, o descriptivo al error que estés presentando. En este caso debido a que necesitas ayuda con un ArrayList que no esta guardando los objetos como ha de esperarse, un tema descriptivo del problema podría ser: "Entrega CU00665B. Inconveniente al agregar un objeto a un ArrayList java." ext..

2do: Veo que has creado un nuevo tema https://www.aprenderaprogramar.com/foros/index.php?topic=1549.0 que mas bien podría ser una continuación en este mismo hilo (tema) Cuando actualices, mejores o corrijas un código que ya ayas publicado y que quieras publicar dicha actualización, mejora o corrección, es recomendable que lo hagas en un mismo hilo, con su comentario correspondiente, esto nos permite a todos los que leamos, una mejor asimilación del tema.

En cuanto al inconveniente que estas presentando, el problema (por una razón que aun no entiendo) en este caso lo esta generando el método nextLine(); de la clase Scanner, para "corregir" esto, sustituimos el método nextLine(); por el metodo next();

También te recomiendo cuidar tu ortografía para evitar cosas como escribir "en"  donde deberias escribir "el". El truco esta en leer y releer tu código en busca de estos "errores" en los cuales el compilador java no nos brinda apoyo  ;D

Otras sugerencias y comentarios los encontraras a modo de comentario en el siguiente código que he editado ligeramente a partir de tu código.

Clase TestListaNombres
Código: [Seleccionar]
import java.util.Scanner;
/**
 * Write a description of class TestListaNombres here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class TestListaNombres{
   
    public TestListaNombres(){
    }
   
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        ListaNombres listDeAmigos = new ListaNombres("Amigos");//Cambiamos el nombre de la variable "listDeNombres" por "listDeAmigos"
       
        System.out.print("¿Cuantos nombres desea ingresar?: ");
        int numIngresos = sc.nextInt();
       
        for(int i = 0; i < numIngresos; i++){
            System.out.print("Ingresas nombre numero " + (i+1) + ": ");
            listDeAmigos.addNombre(sc.next());/*Eliminamos la variable String "nom" y sustituimos el metodo nextLine(); por el metodo next(); el cual pasamos como
            parámetro en sustitución de la variable "nom"*/
        }
       
        System.out.println("\nEn estos momentos el tamaño de su lista de amigos es de: " + listDeAmigos.getTamaño());
       
        System.out.print(listDeAmigos.getListaDeNombres());
    }
}

clase ListaNombres
Código: [Seleccionar]
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
/*En caso de no usar muchas clases de un pakage, es recomendable especificar la/s clase/s a usar y evitar una sintaxis como: import java.util.*; ya que con esta sintaxis
   cargamos todas las clases del pakage y con esto desperdiciamos recursos como memoria y tiempo de respuesta en nuestros programas.*/
/**
 * Write a description of class ListaNombres here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class ListaNombres{
    private String nombreDeLaLista;/*Con esta variable intentas darle un nombre a la lista, pero en realidad no haces uso de esta variable y tampoco es la forma
    correcta de hacer lo que pretendes, el nombre que le has asignado a esta colección es: "listaDeNombres" y en su lugar podrías asignarle como nombre "amigos"
    o "listaDeAmigos" ext.. pero no tratar de vincular una variable como nombre de la lista o coleccion. (te recomiendo eliminar esta variable)*/
    private List<String> listaDeNombres;
   
    public ListaNombres(String nombreDeLaLista){
        this.nombreDeLaLista = nombreDeLaLista;
        listaDeNombres = new ArrayList<String>();
    }
   
    public void addNombre(String nombre){
        listaDeNombres.add(nombre);
    }
   
    public String getNombreABuscar(int i){/*El nombre de este método no es adecuado, un método get o set debe de estar relacionado a una variable de la clase para
        reasignar un valor (en caso de set) o devolver un valor (en caso de get) de x variable. Un nombre adecuado podria ser: buscarNombre(int i); ext..*/
        if(i >= 0 && i < listaDeNombres.size()){
            return listaDeNombres.get(i);
        }else{
            return "No se encuentra el nombre";
        }
    }
   
    public int getTamaño(){//Un nombre mas adecuado podría ser: obtenerTamaño(); tamañoListaDeNombres(); ext..
        return listaDeNombres.size();
    }
   
    public void removerNombre(int i){
        if(i >= 0 && i < listaDeNombres.size()){
            listaDeNombres.remove(i);
        }else{
            System.out.println("Este nombre no existe.");
        }
    }
   
    public List<String> getListaDeNombres(){
        return listaDeNombres;
    }
}

Saludos!
« Última modificación: 02 de Noviembre 2014, 14:24 por Jorge lopez »
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

Cabanota

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 26
    • Ver Perfil
Re:Entrega CU00665B. Inconveniente al agregar un objeto a un ArrayList java.
« Respuesta #2 en: 02 de Noviembre 2014, 17:48 »
Intente e intente y no encontraba una solución a este problema jejejejeje  ;D gracias por tu ayuda y por tus comentarios :)

 

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