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
eu diria mais, o que poderia ser feito é:
cnpj = ...
nome = ...
arrayEmpresas[i] = new Empresa(cnpj, nome);