Foros del Web » Programación para mayores de 30 ;) » Java »

Problema con ArrayList

Estas en el tema de Problema con ArrayList en el foro de Java en Foros del Web. hola, quiero agregar algunos elementos en un ArrayList y luego visualizarlos, pero al momento de ejecutar el programa se cuelga y no logro ver los ...
  #1 (permalink)  
Antiguo 18/09/2011, 10:07
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 9 meses
Puntos: 3
Problema con ArrayList

hola, quiero agregar algunos elementos en un ArrayList y luego visualizarlos, pero al momento de ejecutar el programa se cuelga y no logro ver los datos. Tambien el metodo agregar lo ocupo para mostrar los valores.

¿Por que se cuelga el programa y como solucionarlo? otra consulta más hay alguna forma de ocupar un metodo para agregar valores y otro metodo para mostrar los datos del ArrayList y asi no tener todo en un mismo metodo como en mi programa.
gracias

Código PHP:
import java.util.ArrayList;
import java.util.Iterator;

public class 
PruebaList {

private 
PruebaList listaPrueba;
private 
ArrayList <PruebaListguardar;
private 
String nombre;
private 
int edad;

public 
PruebaList() {
}



public 
void setNombre(String nombre)
{
this.nombre=nombre;
}

public 
String getNombre()
{
return 
nombre;
}

public 
void setEdad(int edad)
{
this.edad=edad;
}

public 
ArrayList<PruebaListgetGuardar()
{
return 
guardar;
}

public 
void setGuardar(ArrayList<PruebaListguardar)
{
this.guardar=guardar;

}

public 
void agrega()
{
guardar = new ArrayList<PruebaList>();
listaPrueba = new PruebaList();
try
{

listaPrueba.setNombre("nombre 1");
listaPrueba.setNombre("nombre 2");
listaPrueba.setEdad(28);
listaPrueba.setEdad(6);
guardar.add(listaPrueba);

Iterator i=guardar.iterator();
while(
i.hasNext())
{
System.out.println(listaPrueba.getNombre());
}
}
catch(
Exception e)
{
System.out.println("Error agrega:"+e.getMessage());
}

}




public static 
void main(String[] args)
{
PruebaList obj=new PruebaList();

try
{
obj.agrega();
}
catch(
Exception e)
{
System.out.println("Error main:"+e.getMessage());
}


}



  #2 (permalink)  
Antiguo 18/09/2011, 11:34
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: Problema con ArrayList

El programa no se cuelga, es que haces un bucle infinito.

Código Java:
Ver original
  1. Iterator i=guardar.iterator();
  2. while(i.hasNext())
  3. {
  4. System.out.println(listaPrueba.getNombre());
  5. }

Este bucle no termina nunca, porque nunca avanzas el iterador.

El método hasNext siempre devuelve true (porque has insertado un valor en el arrayList) y no utilizas el método Next para que el iterador pase al siguiente valor

Código Java:
Ver original
  1. Iterator i=guardar.iterator();
  2. while(i.hasNext())
  3. {
  4. i.next();
  5. System.out.println(listaPrueba.getNombre());
  6. }

Eso arregla el problema del bucle infinito.

Lo que no arregla es si lo que haces en el programa tiene sentido o no, lo cual no puedo saber, porque no sé qué intentas hacer.

No entiendo tu pregunta:

Cita:
hay alguna forma de ocupar un metodo para agregar valores y otro metodo para mostrar los datos del ArrayList y asi no tener todo en un mismo metodo como en mi programa.
Por supuesto que puedes tener todos los métodos que quieras, aunque intuyo que no es esa tu duda.

Saludos y si necesitas más ayuda, explícate algo más.
  #3 (permalink)  
Antiguo 18/09/2011, 11:55
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 9 meses
Puntos: 3
Respuesta: Problema con ArrayList

Hola, muchas gracias por tu respuesta :). Ahora me explico mejor, no sé si sera posible, pero yo intento ingresar varios nombres y edades en la lista de esta forma
listaPrueba.setNombre("luis");
listaPrueba.setNombre("maria");
listaPrueba.setEdad(28);
listaPrueba.setEdad(6);
ocupando el mismo metodo setnombre y setedad, por ejemplo luis tiene 28 años y maria 6 años, o es necesario que exista un metodo distinto para cada atributo, por ejemplo setNombre1(con el nombre de maria) y setedad1(con edad de 6 años que corresponde a maria), Unicamente estoy practicando con ArrayList.

Con tener distintos metodos, en mi programa ¿como podria implementar eso?
tener un metodo que se llama agregarValorLista(aqui llenar la lista con los datos)

luego un metodo mostrarValorLista(aqui recorrerla y luego visualizarlos por pantalla)
Espero que me logres entender )
Gracias
  #4 (permalink)  
Antiguo 18/09/2011, 12:29
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: Problema con ArrayList

Entiendo lo que quieres hacer, pero te has liado mucho y haces cosas raras.

Te dejo un ejemplo un poco cambiado:

Código Java:
Ver original
  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package palabras;
  6.  
  7. import java.util.ArrayList;
  8.  
  9. /**
  10.  *
  11.  * @author Alejandro
  12.  */
  13. class Persona {
  14.     private String nombre;
  15. private int edad;
  16.  
  17.     public int getEdad() {
  18.         return edad;
  19.     }
  20.  
  21.     public Persona(String nombre, int edad) {
  22.         this.nombre = nombre;
  23.         this.edad = edad;
  24.     }
  25.  
  26.     public void setEdad(int edad) {
  27.         this.edad = edad;
  28.     }
  29.  
  30.     public String getNombre() {
  31.         return nombre;
  32.     }
  33.  
  34.     public void setNombre(String nombre) {
  35.         this.nombre = nombre;
  36.     }
  37.  
  38.     void mostrar() {
  39.         System.out.println("Nombre: "+nombre+"\nEdad: "+edad);
  40.     }
  41. }
  42.  
  43. class PruebaList {
  44.  
  45. private ArrayList <Persona> personas;
  46.  
  47.  
  48. public PruebaList() {
  49.     personas = new ArrayList <Persona>();
  50. }
  51.  
  52.  
  53.  
  54.  
  55. public boolean agregarPersona(String nombre, int edad)
  56. {
  57.   return personas.add(new Persona(nombre,edad));
  58. }
  59.  
  60.  
  61. public void mostrar(){
  62.  
  63.  for(Persona persona : personas){
  64.   persona.mostrar();
  65.  }
  66. }
  67.  
  68. }
  69.  
  70. public class Pruebas {
  71.    
  72.    
  73.     public static void main(String args[]){
  74.        
  75.         PruebaList personas = new PruebaList();
  76.        
  77.         personas.agregarPersona("Montse", 35);
  78.         personas.agregarPersona("Alex", 25);
  79.        
  80.         personas.mostrar();
  81.     }
  82. }

Lo mejor es separar cada clase en un fichero .java, pero te lo pongo junto para que lo puedas probar rápidamente.

Si tienes dudas sobre el funcionamiento, pregúntame. Fíjate en como lo hago yo y en lo que tu intentabas hacer.
  #5 (permalink)  
Antiguo 18/09/2011, 20:27
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 9 meses
Puntos: 3
Respuesta: Problema con ArrayList

Gracias, entendi toda la logica de tu programa y eso mismo estaba buscando.
Aunque esta parte del codigo,¿ como tendria que hacerla si quisiera ocupar el ciclo while o un for normal(i=0;i<valor;i++)?

public void mostrar(){

for(Persona persona : personas){
persona.mostrar();
}

Por que este metodo devuelve un valor boolean?
Código PHP:
public boolean agregarPersona(String nombreint edad)
{
  return 
personas.add(new Persona(nombre,edad));


Última edición por -thor-; 18/09/2011 a las 21:02
  #6 (permalink)  
Antiguo 19/09/2011, 04:46
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: Problema con ArrayList

El método agregarPersona devuelve un booleano porque este valor debería indicar si se ha insertado o no el valor correctamente.

Me ha faltado controlar las excepciones que puede lanzar el método add.

Código Java:
Ver original
  1. public boolean agregarPersona(String nombre, int edad)
  2. {
  3.  
  4.  boolean insertado = false;
  5.   try{
  6.    insertado = personas.add(new Persona(nombre,edad));
  7.  }catch(Exception e){}
  8. return insertado;
  9. }

Sobre como hacer el bucle con while o for, lo más sencillo es usar un Iterador como hacías antes:

Código Java:
Ver original
  1. public void mostrar(){
  2.  Iterator<Persona> i = personas.iterator();
  3.  Persona persona;
  4.  while (i.hasNext())
  5.   persona = i.next();
  6.   persona.mostrar();
  7.  }
  8. }
  #7 (permalink)  
Antiguo 19/09/2011, 16:39
 
Fecha de Ingreso: febrero-2006
Mensajes: 446
Antigüedad: 18 años, 9 meses
Puntos: 3
Respuesta: Problema con ArrayList

Muchas gracias por tu ayuda :)

Etiquetas: arraylist
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:26.