[duvida] java.lang.NullPointerException

9 respostas
A

pq ta dando isso?

"--------------------Configuration: --------------------
Exception in thread “main” java.lang.NullPointerException
at Orgao.main(Orgao.java:19)

Process completed."

class Empresas {
	String cnpj;
	Funcionarios[] empresaFuncList;

	void adicionaFunc (Funcionarios f, int x) { // acredito que o erro esteja na minha sintaxe aqui....
		this.empresaFuncList[x] = f;
	}
}

class Funcionarios {
	String name;
	int age;
}

public class Orgao {
	public static void main(String args[]) {

		Funcionarios[] funcList = new Funcionarios[100];

		funcList[0].name = "John";
		funcList[0].age = 31;

		funcList[1].name = "Mark";
		funcList[1].age = 29;

		Empresas eletroShop = new Empresas();
		eletroShop.empresaFuncList = new Funcionarios[8];

		eletroShop.adicionaFunc (funcList[1], 0); //aqui que ta dando problema, ele deveria adicionar o funcionário "funcList[1]"(Mark) na lista de funcionarios "empresaFuncList" da empresa "eletroShop" na posição "0", mas estou fazendo algo errado!


	}
}

9 Respostas

ViniGodoy

Onde vc inicializa a variável eletroShop?

A

copiei o codigo errado. agora editei e consertei.

eh q na hora de copiar o codigo pra ca eu fiz mudanças pra ficar mais facil pro pessoal aqui ler e entender

enfim, taih o codigo, e ta dando esse erro ai q eu botei… =(

Giulliano
class Empresas {  
    String cnpj;  
    Funcionarios[] empresaFuncList;  //Falta inicializar o array antes de adicionar valores, por exemplo, Funcionarios[] empresaFuncList = new  Funcionarios[100];
  
    void adicionaFunc (Funcionarios f, int x) { // acredito que o erro esteja na minha sintaxe aqui....  
        this.empresaFuncList[x] = f;  
    }  
}
A
Giulliano:
class Empresas {  
    String cnpj;  
    Funcionarios[] empresaFuncList;  //Falta inicializar o array antes de adicionar valores, por exemplo, Funcionarios[] empresaFuncList = new  Funcionarios[100];
  
    void adicionaFunc (Funcionarios f, int x) { // acredito que o erro esteja na minha sintaxe aqui....  
        this.empresaFuncList[x] = f;  
    }  
}

eu fiz isso na main... pq se eu fizer na classe Empresa, toda empresa q eu criar vai ter o mesmo numero de funcionarios. fazendo isso na main eu posso definir diferentes tamanhos de listas para diferentes empresas

adriano_si

Cara... tenta assim...

class Empresas {
    String cnpj;
    Funcionarios[] empresaFuncList;

    void adicionaFunc (Funcionarios f, int x) { // acredito que o erro esteja na minha sintaxe aqui....
        this.empresaFuncList[x] = f;
    }
}

class Funcionarios {
    String name;   
    int age;
}

public class Orgao {
    public static void main(String args[]) {

        Funcionarios[] funcList = new Funcionarios[]{new Funcionarios(), new Funcionarios()};

        funcList[0].name = "John";
        funcList[0].age = 31;

        funcList[1].name = "Mark";
        funcList[1].age = 29;

        Empresas eletroShop = new Empresas();
        eletroShop.empresaFuncList = new Funcionarios[8];

        eletroShop.adicionaFunc(funcList[1], 0);
    }
}

Lembras que quando crias um Array de Funcionarios, ainda nao tens nenhum Objeto funcionario para esse Array... quando fizeres o funcList[0].name

esse funList[0] não tem nenhum Objeto pra poder chamar seu atributo name... Por isso o nullPointer...

[EDIT] Pode ser assim também

funcList[0] = new Funcionarios();
        funcList[0].name = "John";
        funcList[0].age = 31;

        funcList[1] = new Funcionarios();
        funcList[1].name = "Mark";
        funcList[1].age = 29;
A
adriano_si:
Cara... tenta assim...
class Empresas {
    String cnpj;
    Funcionarios[] empresaFuncList;

    void adicionaFunc (Funcionarios f, int x) { // acredito que o erro esteja na minha sintaxe aqui....
        this.empresaFuncList[x] = f;
    }
}

class Funcionarios {
    String name;   
    int age;
}

public class Orgao {
    public static void main(String args[]) {

        Funcionarios[] funcList = new Funcionarios[]{new Funcionarios(), new Funcionarios()};

        funcList[0].name = "John";
        funcList[0].age = 31;

        funcList[1].name = "Mark";
        funcList[1].age = 29;

        Empresas eletroShop = new Empresas();
        eletroShop.empresaFuncList = new Funcionarios[8];

        eletroShop.adicionaFunc(funcList[1], 0);
    }
}

Lembras que quando crias um Array de Funcionarios, ainda nao tens nenhum Objeto funcionario para esse Array... quando fizeres o funcList[0].name

esse funList[0] não tem nenhum Objeto pra poder chamar seu atributo name... Por isso o nullPointer...

[EDIT] Pode ser assim também

funcList[0] = new Funcionarios();
        funcList[0].name = "John";
        funcList[0].age = 31;

        funcList[1] = new Funcionarios();
        funcList[1].name = "Mark";
        funcList[1].age = 29;

deu certo, mas nao entendo oq vc fez, pq vc repetiu o "new Funcionarios()" ? minha array n ficou sem tamanho definido desse jeito? como q funciona?

A

ahhhhhhhhhhhhhhhhhhh

entendi!!!

A

daquele jeito “Funcionarios[] funcList = new Funcionarios[]{new Funcionarios(), new Funcionarios()};” nao deu erro mas eu tbm n entendi a logica disso

adriano_si

Cara… Quando você instancia um Array… imagina que você está criando um Objeto que guarda valores… Quando você faz isso

Funcionarios[] funcList = new Funcionarios[100];

Você está criando somente 1 Objeto que é um Array de Funcionários e dizendo que esse Objeto tem espaço pra receber 100 Objetos do tipo Funcionarios. Porém você não tem nenhum Objeto Funcionarios criado, voc~e só tem a vaga do estacionamento mas não tem nenhum carro estacionado nessa vaga. Quando você pede pra ele setar a propriedade nama do funcList[0] no espaço [0] não existe um objeto Funcionarios, logo a VM emite um NullPointer, pois não há nada pra quem ela possa setar um nome…

Essa sintaxe

Funcionarios[] funcList = new Funcionarios[]{new Funcionarios(), new Funcionarios()};

nada mais é do que uma forma de iniciar o Array colocando 2 Objetos dentro dele…

Falows :wink:

Criado 10 de setembro de 2010
Ultima resposta 10 de set. de 2010
Respostas 9
Participantes 4