Problem accessing data from an object in an object array

Asked

Viewed 22 times

-1

I have a Store class that has an array of type Product (which has name, code, price and quantity) and I need to access the given name of the objects of this array.

The following code is giving pointer problem in main function, but does not give correction suggestions:

//classe main

public class ProjetoPOO1 {
    public static void main(String[] args) {
        Loja loja = new Loja();
        loja.getProdutos()[0].setNome("abacaxi");
        loja.getProdutos()[1].setNome("maça");
        loja.listarProdutos();
    }
}

//Classe Loja

public class Loja {
    private Produto[] produtos;
    private Cliente[] clientes;
    private Venda[] vendas;
    private Item[] itens;
    private static int i = 0;

    public void listarProdutos(){
        for(int j = 0; j < this.produtos[j].getNome().length() ; j++){
            System.out.print("Produto " +(j+1)); 
            System.out.println(" = " +this.produtos[j].getNome());
        }
    }

    public Produto[] getProdutos() {
        return produtos;
    }
    //restante dos getters e setters
}

// Classe Produto

public class Produto {
    private int codigo;
    private String nome;
    private float precoVenda;
    private int quantidade;
//getters e setters
}

1 answer

1

When you set the array produtos as a class member Loja and does not initialize this variable, its default value is null. So when you call loja.getProdutos()[0].setNome("abacaxi");, is trying to catch the element 0 of a null reference. This is causing a NullPointerException.

Create a constructor in the class Loja that initializes the variable produtos. Something like:

public Loja (int quantidadeProdutos) {
    this.produtos = new Produto[quantidadeProdutos]; // inicializa array
    for (int i = 0; i < quantidadeProdutos; i++) {
        this.produtos[i] = new Produto(); // inicializa cada posição do array, que null por padrão
    }
}
  • Thank you very much!! It worked :)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.