Ver Mensaje Individual
  #7 (permalink)  
Antiguo 24/07/2013, 17:00
ghacke
 
Fecha de Ingreso: julio-2013
Mensajes: 7
Antigüedad: 10 años, 9 meses
Puntos: 0
Respuesta: Tengo un Problema con ArrayList

Cita:
Iniciado por rottenp4nx Ver Mensaje
No me acuerdo muy bien de la teoría, pero siempre se deben instanciar los Objetos en la POO, el constructor sirve para instanciar(inicializar) un objeto, el constructor debe tener el mismo nombre de la clase y pueden haber varios constructores, en que se diferencian? En los argumentos del constructor. Un Ejemplo:
Código Java:
Ver original
  1. public class Libro{
  2.  
  3.    //Atributos o Propiedades del objeto
  4.    private String codigo;
  5.    private String nombre;
  6.    private boolean estado;
  7.  
  8.    //Constructor Vacío, por lo general lo crea el IDE automáticamente, estado escrito
  9.    //o no, pero es recomendable escribirlo
  10.  
  11.   public Libro(){
  12.   }
  13.  
  14.   //Constructor con argumentos, instancia el objeto con los argumentos pasados
  15.  
  16.   public Libro(String codigo, String nombre, boolean estado){
  17.       this.codigo = codigo;
  18.       this.nombre = nombre;
  19.       this.estado = estado;
  20.   }
  21.  
  22.   public String getNombre(){
  23.         return this.nombre;
  24.   }
  25.  
  26.   public void setNombre(String nombre){
  27.          this.nombre=nombre;
  28.   }
  29.  
  30.  
  31.   public String getCodigo(){
  32.         return this.codigo;
  33.   }
  34.  
  35.   public void setCodigo(String codigo){
  36.          this.codigo=codigo;
  37.   }
  38.  
  39.  
  40.   public boolean isEstado(){
  41.         return this.estado;
  42.   }
  43.  
  44.   public void setEstado(boolean estado){
  45.          this.estado=estado;
  46.   }
  47. }

Veamos, instanciado con constructor vacío.
Código Java:
Ver original
  1. Libro l = new Libro();
  2. System.out.println(l.getNombre());
  3. //no se mostrará nada

Si vemos, el objeto está instanciado, pero no se le han pasado datos a los atributos. Agreguemos datos:

Código Java:
Ver original
  1. Libro l = new Libro();
  2. System.out.println(l.getNombre());
  3. l.setNombre("El Túnel");
  4. System.out.println(l.getNombre());
  5. //Mostrará "El Túnel"

Ahí le asignamos datos al atributo nombre del objeto libro.
Ahora veamos un constructor con argumentos.
Código Java:
Ver original
  1. Libro l = new Libro("abc123","Niebla",true);
  2. System.out.println(l.getNombre());
  3. //Mostrará "Niebla"


//Veamos un objeto sin instanciar
Código Java:
Ver original
  1. Libro l;
  2. System.out.println(l.getNombre());

Vemos que da un error, por no estar instanciado el objeto. El famoso NullPointerException
------------------------------------------

Ahora ArrayList
Código Java:
Ver original
  1. public class Libros{
  2.  
  3.   //Creamos el arraylist
  4.   private ArrayList<Libro> mislibros;
  5.  
  6.   //Constructor de la clase
  7.    public Libros(){
  8.      mislibros = new ArrayList<Libro>();
  9.    }
  10.  
  11.   public Libro buscarLibroporNombre(String nombre){
  12.        for(Libro l : mislibros){
  13.             if(l.getNombre().equals(nombre)){
  14.                   return l;
  15.             }
  16.        }
  17.        return null;
  18.    }
  19.  
  20.    public void agregarLibro(Libro l){
  21.         mislibros.add(l);
  22.    }
  23.  
  24.    public void mostrarLibros(){
  25.         for(Libro l: mislibros){
  26.              System.out.println(l.getNombre());
  27.         }
  28.    }
  29.  
  30. }

Ahora en la clase Main o principal, ponemos a prueba lo Anterior

Código Java:
Ver original
  1. Libros libros = new Libros();
  2.   Libro l = new Libro("abc123","El tunel", true);
  3.   libros.agregarLibro(l);
  4.   Libro l2 = new Libro("zxc343","Niebla",false);
  5.   libros.agregarLibro(l2);
  6.   Libros l3 = new Libro();
  7.   l3.setCodigo("qwerty");
  8.   l3.setNombre("Elegi vivir");
  9.   l3.setEstado(true);
  10.   libros.agregarLibro(l3);
  11.  
  12.   libros.mostrarLibros();
  13.   l = libros.buscarLibro("El tunel");
  14.   System.out.println(l.getCodigo());
  15.   System.out.println(l.getNombre());
  16.   System.out.println(l.isEstado());


Solo te queda practicar, Saludos
Hola, de verdad, muchísimas gracias por responder, se que ustedes tienen otras cosas que hacer y aún así ayudan, eso me gusta.

Bueno, por otro lado estuve intentando hacer que funcione, creo que está bastante bien lo que voy haciendo, pero aún así me tira un error, mira cree otro post: http://www.forosdelweb.com/f45/error-uno-mis-programas-1066651/

Esto lo hice antes de leer tu mensaje, ahora trataré de mejorarlo con lo que me dijiste, pero de igual forma si puedes revisar cual es el error que tengo te agradecería :D

Muchas gracias y a las órdenes.


EDIT:

Ahora estuve revisando el ejemplo que me diste y parece que funcionará, la verdad es que está muy bueno, la única duda que tengo es si yo para cada libro nuevo que se ingrese tengo que crear un nuevo: Libro 15 = new Libro();

Última edición por ghacke; 24/07/2013 a las 17:10