0

He estado luchando con este problema toda la noche y no he podido solucionarlo ya que soy muy novato aun y cuando tengo mucho código en mi vista no puedo ver muy bien que es lo que estoy haciendo mal.

Primero probé mostrando las características de la venta y va todo bien. El problema llega cuando trato de registrar la venta en un objeto que tiene un array ventas. El error que me sale es:

 "Exception in thread "main" java.lang.NullPointerException
  at Info_Compra_Venta.Ventas.RegistrarVenta(Ventas.java:20)
  at evaluación_3.Evaluación_3.main(Evaluación_3.java:181)
C:\Users\Luis David\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53:

Java returned: 1 BUILD FAILED (total time: 48 seconds)"

public class Evaluación_3 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
     
       //Scanner
       Scanner SC = new Scanner(System.in);
        
       //Fecha
       Date myDate = new Date();
       String Fecha = new SimpleDateFormat("dd-MM-yyyy").format(myDate);
          
       //CarroVentas
       ArrayList <Producto> CarroVenta = new ArrayList();
       
       //Compras
       Compras compras = new Compras();
       
       
       //Ventas
       Ventas ventas = new Ventas();
       
       //CarroCompras
       ArrayList <Producto> CarroCompra = new ArrayList();
       
       //Productos
       ProductosProveedor productosPROV = new ProductosProveedor();

       //Proveedores
        Proveedor Aliexpress = new Proveedor(1,"Aliexpress","974635475" , "Calle #4" , productosPROV.CrearProductos());
        Proveedor PCFactory = new Proveedor(2, "Pc Factory" , "984453246" , "Calle #5243" , productosPROV.CrearProductos());
        ArrayList <Proveedor> Proveedores = new ArrayList();
        Proveedores.add(Aliexpress);
        Proveedores.add(PCFactory);
        
       //Factory Method
       Transaccion transaccion;
        
       
       //Empresa
       BodegaEmpresa Empresa = new BodegaEmpresa();
      
       
       
       //Menu
       
   do{
       System.out.println("1- Realizar Venta"+
               "\n"+"2- Realizar Compra"+
               "\n"+"3- Registro de Compras"+
               "\n"+"4- Registro de ventas"+
               "\n"+"5- Lista Productos");
       
       
       int Opcion = SC.nextInt();
       
       
       switch(Opcion){
            
         case 1:
           Empresa.VerProductos();
           boolean Salir = false;
           do{
              
              System.out.println("\n"+"Seleccione el ID de los productos a vender"+"\n"+"(0) Para ir al pago");
              int OpcionV = SC.nextInt();
              
              if(OpcionV !=0){
              
             
               for(int i=0; i<Empresa.ArrayMiBodega().size(); i++){
                  if(Empresa.ArrayMiBodega().get(i).getID() == OpcionV){
                      Empresa.ArrayMiBodega().get(i).Catacteristicas();
                      
                      System.out.print("Ingrese la cantidad a vender: ");
                      int OpcionC = SC.nextInt();
                      
                      //Quitar el stock vendido de mi bodega
                      Empresa.ArrayMiBodega().get(i).QuitarStock(OpcionC);
                      
                      //recuperar valores de producto vendido
                      int ID = Empresa.ArrayMiBodega().get(i).getID();
                      String Nombre = Empresa.ArrayMiBodega().get(i).getNombre();
                      int Precio = Empresa.ArrayMiBodega().get(i).getPrecio();
                      int Descuento = Empresa.ArrayMiBodega().get(i).getDescuento();
                      Categoria categoria = Empresa.ArrayMiBodega().get(i).getCategoria();
                      
                      //Crear un producto con mismos valores
                      Producto ProductoV = new Producto(ID , Nombre , Precio , Descuento , OpcionC , categoria );
                      
                      //AgregarProductos a carrito
                      CarroVenta.add(ProductoV);
                      
 
                  }
               }
              }else{
                  Salir = true;
              }
  
           }while(Salir == false);
           

             System.out.println("1- Cliente Persona   2- Cliente empresa");
             int OpcionC = SC.nextInt();
             
                if(OpcionC == 1){
             
                  System.out.println("Ingrese Rut cliente (Sin puntos ni guiones)");
                  int ID = SC.nextInt();
                  
                  System.out.println("Ingrese el nombre del cliente");
                  String Nombre = SC.next();

                  System.out.println("Ingrese la direccion del cliente");
                  String Direccion = SC.next();
                  
                  ClientePersona NuevoClienteP = new ClientePersona(ID , Nombre , Direccion);
                  
                  Venta NuevaVenta = new Venta(1, Fecha , NuevoClienteP , CarroVenta); /* */
                  
                  
                  
                  System.out.println("1- Pago credito"+"\n"+"2- Pago desposito");
                  int OpcionP = SC.nextInt();
                  
                    /* */
                    if(OpcionP == 1){
                        System.out.println("Ingrese el tipo de tarjeta");
                        String TipoT = SC.next();
               
                        System.out.println("Ingrese los digitos de la tarjeta");
                        String Dtarjeta= SC.next();
                        
                        System.out.println("Ingrese en cuantas cuotas desea pagar");
                        int Cuotas = SC.nextInt();
                       // transaccion = new PagoViaCredito().CrearPago(1);
                    }else{
                        int Total = NuevaVenta.getTotal();
                        
                        System.out.println("El valor a pagar es "+Total+"\n")
                                ;
                        System.out.println("Ingrese el ID de la compra");
                        int OpcionI = SC.nextInt();
               
                        System.out.println("Ingrese el monto a pagar");
                        int OpcionM = SC.nextInt();
                       // transaccion = new PagoViaDeposito().CrearPago();
                    }
                    ventas.RegistrarVenta(NuevaVenta);

SuperG280
  • 1,889
  • 7
  • 14
  • Buenas, David, el error está en la clase Ventas, en la línea 20, que no has pegado ahí. ¿Qué hay en esa línea? El objeto que sea al que se hace referencia ahí no lo has instanciado. – RubioRic Jul 05 '21 at 10:03
  • 2
    ¿Responde esto a tu pregunta? [¿Cuál es la solución a todos los errores NullPointerException presentes, pasados y futuros?](https://es.stackoverflow.com/questions/42977/cu%c3%a1l-es-la-soluci%c3%b3n-a-todos-los-errores-nullpointerexception-presentes-pasados) – RubioRic Jul 05 '21 at 10:03
  • No entiendo muy bien tu respuesta :( – David Phillips Torres Jul 05 '21 at 10:07
  • 1
    Lo que tienes que hacer es editar la pregunta y agregar el Código de la clase `Ventas.java`, lo que RubioRic te señala es que leas el error de Java ahi te muestra ` java.lang.NullPointerException at Info_Compra_Venta.Ventas.RegistrarVenta(Ventas.java:20)` que significa que en la clase `Ventas` en el método `RegistrarVenta` linea 20 esta el error. – Roberto E Moran Jul 05 '21 at 10:09
  • 1
    *cuando tengo mucho código en mi vista no puedo ver muy bien que es lo que estoy haciendo mal*... Eso nos pasa a todos, novatos o con 15 años de experiencia. Divide las tareas complejas en subtareas más pequeñas y crea distintos métodos. Eso siempre ayuda a que el código sea más legible – Pablo Lozano Jul 05 '21 at 10:16
  • La excepción nos está dando la información: java.lang.NullPointerException at Info_Compra_Venta.Ventas.RegistrarVenta(Ventas.java:20) . El error se produce en Ventas.java:20, la línea 20 del fichero Ventas.java. Si ahí pone algo como pepe.setVenta(1) entonces el objeto pepe es null. Es null porque en tu código no has hecho nunca Loquesea pepe = new Loquesea();. – RubioRic Jul 05 '21 at 10:16
  • public class Ventas { private ArrayList Ventas; public void RegistrarVenta(Venta venta){ Ventas.add(venta); } public void BuscarVentas(int IDCliente){ for(int i=0; i – David Phillips Torres Jul 05 '21 at 13:25
  • Puedes editar la pregunta para incluir esa información. Como te indicaba, da la sensación de que no inicializas el ArrayList Ventas, por lo tanto Ventas.add es igual a null.add y salta la excepción. – RubioRic Jul 05 '21 at 15:30
  • Trata de no incluir todo el código en tu método main, es bastante confuso leer el código. En las líneas que te bota error realiza una depuración para saber que esta devolviendo tu método; como ya te dijeron lo más probable que sea una inicialización de tu ArrayList. – Joshin Jul 05 '21 at 20:15

1 Answers1

0

David Phillips Torres, lo mejor es que lo que el Código que agregaste en los comentarios lo agregues a la pregunta, para poder verlo el Código con indentación y sea más fácil leerlo.

extrayendo el fragmento de Código, el error se deba a que en la clase no instancias ArrayList Ventas entonces cuando le quieres agregar una venta el Array esta nulo causando java.lang.NullPointerException.

public class Ventas { 
 private ArrayList<Venta> Ventas; // Sin instanciar

 public void RegistrarVenta(Venta venta){
   Ventas.add(venta); // ArrayList con estado nulo.
 }

}

Solución: Instancias el array dentro del constructor en la clase Ventas.

public class Ventas { 
 private ArrayList<Venta> Ventas;

 // Constructor de clase.
 public Ventas() {
   Ventas = new ArrayList();
 }

 public void RegistrarVenta(Venta venta){
   Ventas.add(venta);
 }

}
Roberto E Moran
  • 3,174
  • 1
  • 6
  • 17