0

Al intentar imprimir la lista de objetos me da el error de java.lang.NullPointerException

public Productos(int id, int precio, String nombre) {
    this.id = id;
    this.precio = precio;
    this.nombre = nombre;
}

public int getId() {
    return id;
}

public int getPrecio() {
    return precio;
}

public String getNombre() {
    return nombre;
}

 @Override
    public String toString(){
        String a= "Producto: "+nombre+" ID: "+id+" Precio: "+precio;
        return a;                   
    }

}

A pesar de tener el método toString, no cambia el error, ni tampoco netbeans reconoce con la autocompletación los getters, por lo que más de algo tengo mal, tampoco es un tema de try-catch, ya que solo debería tomar valores ya agregados e imprimirlos

private Productos Productos;
private ArrayList<Productos> productos = new ArrayList<>();

public void newProducto(){
    System.out.println("Ingrese nombre del producto");
    String nombre = sc.nextLine();
    System.out.println("Ingrese precio del producto");
    int precio=sc.nextInt();
    int id = productos.size()+1;
    new Productos(id, precio, nombre);
    productos.add(Productos);
}
public void mostrarProductos(){
   for(int i=0; i<productos.size();i++){
       System.out.println(productos.get(i).toString());

   }
}

De ante mano muchas gracias.

Juampa57
  • 1
  • 3
  • También te recomiendo leer el artículo [Te he votado negativamente porque tu pregunta no incluye los detalles de la excepción.](https://es.meta.stackoverflow.com/a/2877/) – Ruslan López Dec 11 '18 at 20:22

2 Answers2

0

Prueba a en el método toString a cambiar las variables por los métodos que las devuelven.

String a= "Producto: "+getNombre()+" ID: "+getId()+" Precio: "+getPrecio();

Y si no pues almacena los valores en variables dentro del método(Aunque no serviría de nada y sería añadir líneas incensarías).

String nombre = getNombre();
  • por favor deja la corrección, este es el modo de presentar código –  Dec 11 '18 at 20:34
0

Después leer más logré encontrar el error, era la forma en la cual se estaba guardando el objeto.

En vez de ser

new Productos(id, precio, nombre);
productos.add(Productos);

debió ser

Productos p = new Productos(id, precio, nombre);
productos.add(p);
Juampa57
  • 1
  • 3
  • será la forma en que haces la instanciación –  Dec 11 '18 at 20:47
  • @Juampa57 Productos no es un objeto, debería de fallar en tiempo de compilación en vez de dar NPE, por ello sería bueno que agregaras el mensaje exacto de tu excepción. – Ruslan López Dec 11 '18 at 20:49
  • Sep, estaba mal instanciado, pero al corregirlo de esa manera se arreglo el problema – Juampa57 Dec 11 '18 at 20:50
  • @RuslanLópez "Productos" no es lo mismo que "productos", de todas formas al hacer el cambio que está escrito más arriba el código funcionó sin problemas – Juampa57 Dec 11 '18 at 20:52
  • @Juampa57 no podría decirlo, ya que nunca compartiste el mensaje de error – Ruslan López Dec 11 '18 at 20:55