0

El error Exception in thread "main" java.lang.NullPointerException lo localiza en la linea 21. ¿Alguna idea?

class Factura{
private static final int MAX_ITEMS = 100;

private String fecha;
private String nombreCliente;
private Item[] items = new Item[factura.MAX_ITEMS];
private int cantItems;

public Factura(String fecha, String nombreCliente){

    this.fecha = fecha;
    this.nombreCliente = nombreCliente; 
    items = new Item[Factura.MAX_ITEMS];
    cantItems = 0;
}

public void agregarItem(String nombreProducto, long precioUnitario, int cantidad){

    for (int i = 0; i < items.length; i++) {
        if((items[i].getNombreProducto()) == (nombreProducto) && (items[i].getPrecioUnitario()) == (precioUnitario)){

            items[i].setCantidad((items[i].getCantidad())+ 1);
        }
        else{

            items[cantItems] = new Item(nombreProducto, precioUnitario, cantidad);
            cantItems++;
        }
    }

}

public long calcularTotal(){
    long total = 0;
    for (int i = 0; i < items.length; i++){

        total = ((items[i].getPrecioUnitario())*(items[i].getCantidad()));
    }
    return total;
}

public void imprimir(){
    System.out.println("Supermercado El Dorado");
    System.out.println("Fecha: " + fecha);
    System.out.println("Cliente: " + nombreCliente);
    System.out.println("\t" + "Producto" + "\t" + "Precio" + "\t" + "Cantidad");
    for(int i = 0; i < items.length; i++){
        System.out.println(getItems()[i].getCantidad() + "\t" + getItems()[i].getNombreProducto() + "\t" + getItems()[i].getPrecioUnitario());
    }
    System.out.println("Total: $" + calcularTotal());
    System.out.println("Gracias por preferirnos.");
}

public Item[] getItems(){
    return items;
} 

}
Esteban Quito
  • 21
  • 1
  • 2
  • 3

1 Answers1

1

Estas accediendo a la instancia de un indice que puede que siquiera hayas inicializado:

public void agregarItem(String nombreProducto, long precioUnitario, int cantidad){

    for (int i = 0; i < items.length; i++) {

        //No estas seguro si el indice actual del item esta inicializado
        if((items[i].getNombreProducto()) == (nombreProducto) && (items[i].getPrecioUnitario()) == (precioUnitario)){
 //...

Deberias de verificar si el indice esta null para segurarte que si estas accediendo a un indice con instancia:

if( items[i] != null && (items[i].getNombreProducto()) == (nombreProducto) && (items[i].getPrecioUnitario()) == (precioUnitario)){
  //...

Codigo completo del metodo:

public void agregarItem(String nombreProducto, long precioUnitario, int cantidad){

    for (int i = 0; i < items.length; i++) {
        if( items[i] != null && (items[i].getNombreProducto()) == (nombreProducto) && (items[i].getPrecioUnitario()) == (precioUnitario)){

            items[i].setCantidad((items[i].getCantidad())+ 1);
        }
        else{

            items[cantItems] = new Item(nombreProducto, precioUnitario, cantidad);
            cantItems++;
        }
    }

}
Einer
  • 20,190
  • 2
  • 14
  • 36