Estou resolvendo um exercício da fj11 Caleum e acontece o seguinte.
classTesta{publicstaticvoidmain(Stringargs[]){Empresaempresa=newEmpresa();inti=0;/* Funcionario f1 = new Funcionario(); f1.salario = 1000; empresa.emprega(f1); Funcionario f2 = new Funcionario(); f2.salario = 1700; empresa.emprega(f2); Funcionario f3 = new Funcionario(); f3.salario = 1100; empresa.emprega(f3); Funcionario f4 = new Funcionario(); f4.salario = 900; empresa.emprega(f4); */for(i=0;i<3;i++);{Funcionariof=newFuncionario();f.nome="aaa";f.departamento="eee";f.admissao="12345";f.salario=1000+i*100;f.status=true;empresa.emprega(f);empresa.quadroFuncionario();}}}classFuncionario{Stringnome;Stringadmissao;Stringdepartamento;Stringcpf;doublesalario;booleanstatus;}classEmpresa{Stringnome;Stringcnpj;Funcionario[]empregado=newFuncionario[3];staticintcontador=0;voidemprega(Funcionariof){for(inti=0;i<empregado.length;i++)if(empregado[i]==null){empregado[i]=f;break;}}publicvoidquadroFuncionario(){for(inti=0;i<empregado.length;i++){System.out.println(empregado[i].salario);}}}
Quanto utilizo a linha de código comentada na Classe Testa, funciona corretamente, quando tento adicionar os funcionarios com o metodo emprega(f) através do for que criei na classe Testa, o metodo quadroFuncionario apresenta um erro que pelo que entendo significa que empregado[1].salario é igual a null.
O erro é o seguinte:
Exception in thread "main" java.lang.NullPointerException
at Empresa.quadroFuncionario(EmpresaFuncionario.java:29)
at Testa.main(Testa.java:32)
teu array só tem 3 posições.
tu ta tentando colocar mais funcionários nele.
ricardork
Não amigo.
fuadksd
não?
dica. bota teu código entre as tags [code] e indenta ele
ricardork
Não consegui "i"ntender o que você disse. Mas, para garantir coloquei 10 posições na Array, e ele não imprimiu as 4 que estou tentando adicionar pelo for da class Testa, logo na segunda ele acusa que a array esta vazia. Mas no código comentado, adicionando um de cada vez, ele funciona perfeitamente.
fuadksd
tira a chamada empresa.quadroFuncionario() de dentro do for
bota ela embaixo
ricardork
Já o fiz, persegue o erro!
gustavo_mb
Poste seu código dentro da tag code. Vou fazer isso para você:
classTesta{publicstaticvoidmain(Stringargs[]){Empresaempresa=newEmpresa();inti=0;/* * Funcionario f1 = new Funcionario(); f1.salario = 1000; * empresa.emprega(f1); * * * Funcionario f2 = new Funcionario(); f2.salario = 1700; * empresa.emprega(f2); * * Funcionario f3 = new Funcionario(); f3.salario = 1100; * empresa.emprega(f3); * * Funcionario f4 = new Funcionario(); f4.salario = 900; * empresa.emprega(f4); */for(i=0;i<3;i++);{Funcionariof=newFuncionario();f.nome="aaa";f.departamento="eee";f.admissao="12345";f.salario=1000+i*100;f.status=true;empresa.emprega(f);empresa.quadroFuncionario();}}}
O problema é que quando você escreve Funcionario[] empregado = new Funcionario[3];, você apenas está alocando na memória espaço para os 3 funcionário, mas ainda é preciso instância-los individualmente.
Sim. O problema é que a cada iteração do for que emprega os funcionarios, ele está chamando o método quadroDeFuncionarios, que por ua vez itera um array com nulls.
Bote a chamada quadroDeFuncionarios() fora do for
ricardork
Ele resolve parcialmente o problema, agora ele imprimi todas as posições da Array, porém não com os valores esperados no for da classe Testa.
Fazer isso já foge da lógica inicial, pode até resolver, mas foge da linha de raciocínio que estava seguindo. Não consegui compreender bem ainda o que acontece.
denisfm
Olá!
empresa.quadroFuncionarios tem que ficar for do for!
Aqui funcionou, mas insere os mesmos nomes de funcionario, etc. Só muda o salário, mesmo.
classTestaEmpresa{publicstaticvoidmain(String[]args){TestaEmpresatestaEmpresa=newTestaEmpresa();testaEmpresa.funciona();}privatevoidfunciona(){Empresaempresa=newEmpresa();for(inti=0;i<3;i++){Funcionariof=newFuncionario();f.nome="asdasd";f.departamento="asdasd";f.admissao="03102011";f.salario=1000+i*100;f.status=true;empresa.emprega(f);//empresa.quadroFuncionario(); da NullPointerException}empresa.quadroFuncionario();// aqui funciona}classFuncionario{Stringnome;Stringadmissao;Stringdepartamento;Stringcpf;doublesalario;booleanstatus;}classEmpresa{intcontador=0;Stringnome;Stringcnpj;Funcionario[]empregado=newFuncionario[3];privatevoidemprega(Funcionariof){for(inti=0;i<empregado.length;i++){if(empregado[i]==null){empregado[i]=f;break;}}}publicvoidquadroFuncionario(){for(inti=0;i<empregado.length;i++){System.out.println("Nome do empregado: "+empregado[i].nome+" , com salário de: "+empregado[i].salario);}}}}
Vc quer entender porque dar NullPointerException ou o quê?
Abraços!
ricardork
Amigos, agradeço a todos que responderam, a ultima solução solucionou minha dúvida. Eu estava criando dois arquivos .txt separado, um com a classe Testa e o outro com as classes Funcionario e Empresa. O problema foi resolvido, mas para finalizar alguém pode me explicar o que acontecia compilando separadamente?