1

Estoy tratando de que cuando se cree el objeto se inicialice con el método de agregar productos en el array, pero no estoy seguro de si se puede inicializar hay los métodos, por que cuando pongo un método en el constructor me cambia la clase a final por ejemplo a "public class final" no se si asi la clase actua de forma como una clase normal concreta, es un sistema de inventario, igual estaba viendo de que cuando creo la clase el el main y despues llamo a ver productos me da un error de null, creo que dice array null.


public class BodegaEmpresa {
    
    private ArrayList <Producto> ProductosMiBodega;
    
    public BodegaEmpresa(){
        Productos();
    }
    
    public ArrayList Productos(){
        
        Categoria CategoriaT = new Categoria();
        CategoriaT.setID(1);
        CategoriaT.setNombre("Teclado");
        
        Categoria CategoriaM = new Categoria();
        CategoriaM.setID(2);
        CategoriaM.setNombre("Monitor");
        
        Categoria CategoriaMO = new Categoria();
        CategoriaMO.setID(3);
        CategoriaMO.setNombre("Mouse");
        
        Categoria CategoriaA = new Categoria();
        CategoriaA.setID(4);
        CategoriaA.setNombre("Audifono");
        
        /* */
        
        Producto Teclado = new Producto(1,"Teclado Mecanico", 50000 , 4000 ,CategoriaT);
        Producto Teclado2 = new Producto(2,"Teclado Ergonómico", 70000 , 3000 ,CategoriaT);
        
        Producto Monitor = new Producto(3,"Monitor RGB", 150000 , 8000 ,CategoriaM);
        Producto Monitor2 = new Producto(4,"Monitor 8K", 350000 , 12000 ,CategoriaM);
        
        Producto Mouse = new Producto(5, "Mause RGB", 45000 , 2000 , CategoriaMO);
        Producto Mouse2 = new Producto(6, "Mause Ergonómico", 55000 , 2300 , CategoriaMO);
        
        Producto Audifono = new Producto(7, "Audifonos inalambricos" , 100000 , 9000 , CategoriaA);
        Producto Audifono2 = new Producto(8, "Audifonos Alambricos" , 15000 , 3000 , CategoriaA);
        
        ArrayList <Producto> Productos = new ArrayList();
      
        Productos.add(Teclado2);
        Productos.add(Monitor);
        Productos.add(Monitor2);
        Productos.add(Mouse);
        Productos.add(Mouse2);
        Productos.add(Audifono);
        Productos.add(Audifono2);
        
        AgregarProductos(Productos);
        
        return Productos;

    }
    
    public void AgregarProductos(ArrayList Productos){
        ProductosMiBodega = Productos;
    }
    
    
    public void VerProductos(){
        for(int i=0; i<ProductosMiBodega.size(); i++){
            ProductosMiBodega.get(i).Catacteristicas();
        }
    }
    
    public void cantidad(){
        System.out.println(ProductosMiBodega.size());
    }
Amal K
  • 103
  • 5
  • 5
    No está relacionado con el fallo, pero te recomiendo usar las convenciones Java: solo los nombres de clase (y por ende, los constructores) empiezan por mayúscula; los métodos y atributos usan *camelCase* (`verProductos`, `agregarProductos`). Eso hará tu código mucho más legible para otros programadores Java. – SJuan76 Jul 03 '21 at 10:01
  • 4
    Además, indica en qué línea te lanza la excepción, y como es una NullPointerException revisa https://es.stackoverflow.com/questions/42977/cu%c3%a1l-es-la-soluci%c3%b3n-a-todos-los-errores-nullpointerexception-presentes-pasados – SJuan76 Jul 03 '21 at 10:02

1 Answers1

0

Estas planteando mal la solución de tu ejercicio, si ya tienes declarado un Array de objetos de la clase Producto como atributo de la clase BodegaEmpresa, es innecesario que en tu método Productos vuelvas a declarar otro Array de objetos de la clase Producto. Los métodos AgregarProductos y cantidad no hacen nada. El método VerProductos dentro del for llama a un método Catacteristicas que no muestras el código, no se si existe ese método o solo lo pusiste porque ya.

Suponiendo que ya tienes creado la clase Categoria con sus atributos id y nombre y sus respectivos get y set y la clase Producto con sus atributos, get, set y el constructor que reciba por parámetro los 5 atributos.
Te muestro una forma de codificar la clase BodegaEmpresa

public class BodegaEmpresa {
    private ArrayList <Producto> productosMiBodega;
    
    public BodegaEmpresa(){
        productosMiBodega= new ArrayList<>();
    }
    
    public void agregarProductos(){
        
        Categoria categoriaT = new Categoria();
        categoriaT.setId(1);
        categoriaT.setNombre("Teclado");
        
        Categoria categoriaM = new Categoria();
        categoriaM.setId(2);
        categoriaM.setNombre("Monitor");
        
        Categoria categoriaMO = new Categoria();
        categoriaMO.setId(3);
        categoriaMO.setNombre("Mouse");
        
        Categoria categoriaA = new Categoria();
        categoriaA.setId(4);
        categoriaA.setNombre("Audifono");
        
        /* */
        
        Producto Teclado = new Producto(1,"Teclado Mecanico", 50000 , 4000 ,categoriaT);
        Producto Teclado2 = new Producto(2,"Teclado Ergonómico", 70000 , 3000 ,categoriaT);
        
        Producto Monitor = new Producto(3,"Monitor RGB", 150000 , 8000 ,categoriaM);
        Producto Monitor2 = new Producto(4,"Monitor 8K", 350000 , 12000 ,categoriaM);
        
        Producto Mouse = new Producto(5, "Mause RGB", 45000 , 2000 , categoriaMO);
        Producto Mouse2 = new Producto(6, "Mause Ergonómico", 55000 , 2300 , categoriaMO);
        
        Producto Audifono = new Producto(7, "Audifonos inalambricos" , 100000 , 9000 , categoriaA);
        Producto Audifono2 = new Producto(8, "Audifonos Alambricos" , 15000 , 3000 , categoriaA);
        
        ArrayList <Producto> productos = new ArrayList();
      
        productosMiBodega.add(Teclado);
        productosMiBodega.add(Teclado2);
        productosMiBodega.add(Monitor);
        productosMiBodega.add(Monitor2);
        productosMiBodega.add(Mouse);
        productosMiBodega.add(Mouse2);
        productosMiBodega.add(Audifono);
        productosMiBodega.add(Audifono2); 
    }    
    
    public void verProductos(){     
        int contador=1;
        for(Producto bodega:productosMiBodega){
            System.out.println("\t PRODUCTO "+contador);
            System.out.println(bodega.getId());
            System.out.println(bodega.getNombre());
            System.out.println(bodega.getPrecio());
            System.out.println( bodega.getCantidad());
            System.out.println(bodega.getCategoria().getId());
            System.out.println(bodega.getCategoria().getId());
            System.out.println(bodega.getCategoria().getNombre());
            contador++;
        }
    }
    
    public static void main(String[] args) {
        BodegaEmpresa bodega= new BodegaEmpresa();
        bodega.agregarProductos();
        bodega.verProductos();        
    }
}

Observación Como ya te indicaron en los comentarios, solo los nombres de clases y constructores comienzan con mayúscula; los nombres de métodos, atributos y variables locales comienzan con minúsculas.
Si el nombre está formado por palabras compuestas se usa camelCase, Ejemplo:
El atributo ProductosMiEmpresa está mal.
Así se debe escribir productosMiEmpresa

Joshin
  • 1,772
  • 2
  • 4
  • 22