java.lang.Nullpointerexception error even with instantiated and initialized object

Asked

Viewed 45 times

-1

Good afternoon,

In the code below I have already entered the Supplier class within the main Product and even so continues the error below, Can someone help me fix and explain why it’s wrong so please.

Exception in thread "main" java.lang.Nullpointerexception at br.com.java.pacotesemodificadores.products.Produto.main(Product.java:27)

Obs: I disregarded the modifiers since they are inside the same package and file.

/------Beginning of class------/

package br.com.java.pacotesemodificadores.produtos;

class Produto {

private String nome;
private Fornecedor fornecedor;
public  double preco;
        double imposto;


public static void main(String[] args) {

    
    Fornecedor f = new Fornecedor(); // Inicialização de Fornecedor
    Produto p = new Produto();       // Inicialização de Produto
    
      /* Preenchimento de Fornecedor*/
    f.cnpj = "234234123"; 
    f.codigo = "3423423423";

      /* Preenchimento de Fornecedor*/
    p.nome = "Notebook";
    p.preco = 1500;
    p.imposto = 2.0;
    p.fornecedor.codigo = f.codigo; // Linha do erro
    p.fornecedor.cnpj = f.cnpj;


    /* Imprimindo */
    System.out.println("---------------");
    System.out.println("Nome do produto: " + p.nome );
    System.out.println("Preço: " + p.preco );
    System.out.println("Imposto: " + p.imposto);
    System.out.println("---------------");
    System.out.println("Fornecedor codigo: " + p.fornecedor.codigo );
    System.out.println("Fornecedor cnpj: " + p.fornecedor.cnpj);
    System.out.println("---------------");

    
}

}

class Fornecedor {

String codigo;
private String nome;
public String cnpj;

public void setNome(String nome) {
    
    this.nome = nome;
}

public String getNome() {

    return nome;

}

}

1 answer

1

You must access the attributes setar attributes through the "setters" of the class. In addition, you must set the attributes before accessing the variables. In your example, before accessing the variable, you must set the value of the attribute.

Using your code, to make it work we have:

package br.com.java.pacotesemodificadores.produtos;


public static void main(String[] args) {

    
    Fornecedor f = new Fornecedor(); // Inicialização de Fornecedor
    Produto p = new Produto();       // Inicialização de Produto
    
      /* Preenchimento de Fornecedor*/
    f.cnpj = "234234123"; 
    f.codigo = "3423423423";

      /* Preenchimento de Fornecedor*/
    p.nome = "Notebook";
    p.preco = 1500;
    p.imposto = 2.0;
    p.setFornecedor(f) //obedecer o encapsulamento utilizando setters
    // p.fornecedor.codigo = f.codigo; // este valor já foi setado no objeto f.
    // p.fornecedor.cnpj = f.cnpj;  //este valor já foi setado no objeto f.


    /* Imprimindo */
    System.out.println("---------------");
    System.out.println("Nome do produto: " + p.nome );
    System.out.println("Preço: " + p.preco );
    System.out.println("Imposto: " + p.imposto);
    System.out.println("---------------");
    System.out.println("Fornecedor codigo: " + p.fornecedor.codigo );
    System.out.println("Fornecedor cnpj: " + p.fornecedor.cnpj);
    System.out.println("---------------");

    
}

To implement supplier Setter in the product class you must do the following:

class Produto {

private String nome;
private Fornecedor fornecedor;
public  double preco;
        double imposto;

public void setFornecedor(Fornecedor f) {
    this.fornecedor = f

}

public Fornecedor getFornecedor() {
    return fornecedor;

    } 
}

Browser other questions tagged

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