Olá pessoal, sou novo por aqui e estou com algumas dúvidas na criação de array de objetos. Peço desculpas aos moderadores se este assunto já foi abordado. É que não achei.
Segue o meu código:
classFuncionario{privatestaticintnumFuncionarios;privateStringnome;privateDatadataDeEntrada;privateStringrg;privateStringdepartamento;privatebooleandemitido;privatedoublesalario;Funcionario(Stringnome){this.nome=nome;Funcionario.numFuncionarios+=1;}Funcionario(){Funcionario.numFuncionarios+=1;}publicvoidsetDepartamento(Stringdepartamento){this.departamento=departamento;}publicStringgetDepartamento(){returnthis.departamento;}publicvoidsetRg(Stringrg){this.rg=rg;}publicStringgetRg(){returnthis.rg;}publicdoublegetSalario(){returnsalario;}publicvoidsetSalario(doublesalario){this.salario=salario;}voidbonifica(doubleaumento){this.salario+=aumento;}publicvoidisDemitido(booleant){this.demitido=true;}publicvoidsetDataDeEntrada(intdia,intmes,intano){Datad1=newData(dia,mes,ano);this.dataDeEntrada=d1;}publicStringgetDataDeEntrada(){returnthis.dataDeEntrada.getData();}publicvoidmostra(){System.out.println("Salario: "+this.salario);System.out.println("RG: "+this.rg);System.out.println("Departamento: "+this.departamento);System.out.println("Data de Entrada: "+this.dataDeEntrada.getData());}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetNome(){returnthis.nome;}publicintgetNumFuncionarios(){returnFuncionario.numFuncionarios;}}classEmpresa{protectedstaticintcontador=0;privateStringnome;privateStringcnpj;privateStringendereco;privateFuncionario[]empregados;Empresa(inttamanho){this.empregados=newFuncionario[tamanho];}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetNome(){returnthis.nome;}publicvoidsetCnpj(Stringcnpj){this.cnpj=cnpj;}publicStringgetCnpj(){returnthis.cnpj;}publicStringgetEndereco(){returnendereco;}publicvoidsetEmpregados(){this.empregados[contador];Empresa.contador+=1;}publicFuncionariogetFuncionario(intposicao){returnthis.empregados[posicao].setNome(nome);}voidmostraEmpregados(){for(Funcionariod:empregados){System.out.println(d);}}}
O problema ocorre quando instancio minha classe Empresa:
você não instanciou a quantidade exata de funcionários (assim como todos os dados do funcionario), logo irá retornar exceções por serem nulos.
F
felipevs
outra coisa... provavelmente vc colocou para o eclipse gerar os gets e sets foi isso?
se sim...
as vezes no lugar dele da um Set ele coloca um Is (BOm eu nao sei o que é esse Is mas se nao foi vc que colocou eu aconselho vc mudar esse trecho.
# public void isDemitido(boolean t) {
# this.demitido = true;
[/b]Para esse.[/b]
public void setDemitido(boolean t) {
# this.demitido = true;
O erro pode ser por causa disso... ele não está conseguindo setar o Demitido. (Obs: eu nao li o seu código todo, então possa ser que tenha mais erros).
NullPointException é erro de variável nula... nenhum valor, quando vc estudar tratamento de exceção vc entenderá melhor o NullPointException.
DenilsonS
Primeiramente obrigado. Passarei a usar a classe toString
Fiz as alterações que você sugeriu (o método isDemitido, fui eu que criei), mas mesmo assim continua dando erro. Setei todos os atributos do objeto funcionário e mesmo assim. segue:
outra coisa... provavelmente vc colocou para o eclipse gerar os gets e sets foi isso?
se sim...
as vezes no lugar dele da um Set ele coloca um Is (BOm eu nao sei o que é esse Is mas se nao foi vc que colocou eu aconselho vc mudar esse trecho.
# public void isDemitido(boolean t) {
# this.demitido = true;
[/b]Para esse.[/b]
public void setDemitido(boolean t) {
# this.demitido = true;
O erro pode ser por causa disso... ele não está conseguindo setar o Demitido. (Obs: eu nao li o seu código todo, então possa ser que tenha mais erros).
NullPointException é erro de variável nula... nenhum valor, quando vc estudar tratamento de exceção vc entenderá melhor o NullPointException.
esse 'is' é para indicar o boolean
G
guiifreitas
O NullPointerException está ocorrendo porque você está tentando setar os atributos de um Funcionario que ainda não foi criado.
...System.out.println("Criando empresa");Empresaicaro=newEmpresa(1);icaro.empregados[0]=newFuncionario();// cria o objeto Funcionario antes, para depois poder utilizá-lo.icaro.empregados[0].setNome("Ricardo");icaro.empregados[0].setSalario(500);icaro.empregados[0].setDataDeEntrada(1,1,2011);icaro.empregados[0].setDepartamento("TI");icaro.empregados[0].setRg("1234");icaro.empregados[0].setDemitido(false);icaro.mostraEmpregados();
Lembrando que, quando você instancia a sua classe Empresa, no seu construtor você está apenas criando o array de REFERÊNCIAS do tipo Funcionario.
Aah, e em termos de encapsulamento, não sei se é ideal acessar os empregados dessa forma (usando “icaro.empregados”).
Você poderia criar um método addFuncionario( Funcionario f ) na sua classe Empresa, e por meio de um índice, ir adicionando mais funcionários no seu array “funcionarios”.