NullPointerException em array

Boa Tarde!
Estou aprendendo a programar em java e ao rodar este simples programa recebo o erro nullpointerexception.

este e o codigo

import java.util.Scanner;

public class Empresa {

Double cnpj;
String nome;

Empresa[] arrayEmpresas = new Empresa[10];

 void LerDados() {
	for (int i = 0; i < arrayEmpresas.length; i++) {
		Scanner entrada = new Scanner(System.in);
		System.out.println("Digite o Cnpj da Empresa");
		arrayEmpresas[i].cnpj = entrada.nextDouble();
		System.out.println("Digite o Nome da Empresa");
		arrayEmpresas[i].nome = entrada.nextLine();
	}
}
public static void main(String[] args) {
	Empresa empresa = new Empresa();
	empresa.LerDados();
}

}

o erro q aparece no console e este

Exception in thread “main” java.lang.NullPointerException
at Empresa.LerDados(Empresa.java:14)
at Empresa.main(Empresa.java:21)

Agradeco qualquer ajuda possivel

Na linha 14 você tem:
arrayEmpresas[i].cnpj
Mas no seu array de Empresa você não tem nenhum objeto Empresa.
Empresa[] arrayEmpresas = new Empresa[10];

No início do for você precisa instanciar seus objetos.
arrayEmpresas [i] = new Empresa();

E como seu método main está na classe Empresa não precisa instanciar um objeto para chamar o método LerDados()

public static void main(String[] args) {
	LerDados();
}

Mas você precisa deixar o método static:

static void LerDados()

e o atributo arrayEmpresas também
static Teste[] arrayEmpresas = new Teste[10];

Algumas alterações precisam ser feitas para funcionar:

import java.util.Scanner;

public class Empresa {

	Double cnpj;
	String nome;

	static Empresa[] arrayEmpresas = new Empresa[2];

	 static void LerDados() {
		Scanner entrada = new Scanner(System.in); // coloquei fora do for pois você não precisa cria uma instância por iteração dentro do for

		for (int i = 0; i < arrayEmpresas.length; i++) {
			arrayEmpresas[i] = new Empresa();
			
			System.out.println("Digite o Cnpj da Empresa");
			arrayEmpresas[i].cnpj = entrada.nextDouble();
			
			System.out.println("Digite o Nome da Empresa");
			arrayEmpresas[i].nome = entrada.next(); // trocar nextLine() por next()
		}

       entrada.close(); // Fecha
	}
	public static void main(String[] args) {
		LerDados();
	}
}
1 curtida

Quando você instancia um array, ele contém x posições vazias ou nulas (quando é um array de objetos).
Neste caso, cada posição é um null bem grandão.
Você nunca vai conseguir acessar o atributo cnpj de um objeto nulo.
Precisa, antes disso, instanciar a posição:

arrayEmpresas[i] = new Empresa();

Aí pode, sim, invocar o atributo.

1 curtida
1 curtida

eu diria mais, o que poderia ser feito é:

cnpj = ...
nome = ...
arrayEmpresas[i] = new Empresa(cnpj, nome);