Array de Objetos

6 respostas
DenilsonS

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:

class Funcionario {

	private static int numFuncionarios;
	private String nome;
	private Data dataDeEntrada;
	private String rg;
	private String departamento;
	private boolean demitido;
	private double salario;

	Funcionario(String nome) {
		this.nome = nome;
		Funcionario.numFuncionarios += 1;
	}

	Funcionario() {
		Funcionario.numFuncionarios += 1;
	}

	public void setDepartamento(String departamento) {
		this.departamento = departamento;

	}

	public String getDepartamento() {

		return this.departamento;

	}

	public void setRg(String rg) {

		this.rg = rg;
	}

	public String getRg() {
		return this.rg;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

	void bonifica(double aumento) {
		this.salario += aumento;
	}

	public void isDemitido(boolean t) {
		this.demitido = true;
	}

	public void setDataDeEntrada(int dia, int mes, int ano) {
		Data d1 = new Data(dia, mes, ano);
		this.dataDeEntrada = d1;
	}

	public String getDataDeEntrada() {

		return this.dataDeEntrada.getData();
	}

	public void mostra() {
		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());
	}

	public void setNome(String nome) {
		this.nome = nome;

	}

	public String getNome() {
		return this.nome;
	}

	public int getNumFuncionarios() {

		return Funcionario.numFuncionarios;

	}

}

class Empresa {

	protected static int contador=0;
	private String nome;
	private String cnpj;
	private String endereco;
	private Funcionario[] empregados;

	Empresa (int tamanho){
		this.empregados= new Funcionario[tamanho];
	}
	
	public void setNome(String nome) {

		this.nome = nome;
	}

	public String getNome() {
		return this.nome;
	}

	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;

	}

	public String getCnpj() {

		return this.cnpj;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEmpregados() {
		this.empregados[contador];
		Empresa.contador += 1;

	}
	
	public Funcionario getFuncionario(int posicao){
		
		return this.empregados[posicao].setNome(nome);
		
	}

	void mostraEmpregados() {

		for (Funcionario d : empregados) {
			System.out.println(d);
		}
	}

}

O problema ocorre quando instancio minha classe Empresa:

Empresa icaro = new Empresa(5);
		
		icaro.setEmpregados("Ricardo");
		icaro.setEmpregados("Denilson");
		icaro.mostraEmpregados();

recebo um NullPointerException. O que está errado?

6 Respostas

F

Só uma dica… para vc retornar os valores dos tributos vc não faz assim não:

public void mostra() {  
			       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());
    }

VocÊ faz assim … esse metodo toString já existe no java, ele serve para transformar os atributos em string e exibir na tela…

public String toString(){
			
			return "Salario: " + getSalario() + "\n Rg: " + getRg() + "\n Departamento: " + getDepartamento() +
			"\n Data de Entrada: " + getDataDeEntrada();
		}

e na classe de execução p vc chamar ele vc faz …
System.out.println(variavel de intancia.ToString());

irei analisar para ver se encontro mais algum erro.

A

o problema é aqui:

void mostraEmpregados() {

		for (Funcionario d : empregados) {
			System.out.println(d);
		}
	}

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

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:

class Funcionario {

	private static int numFuncionarios;
	private String nome;
	private Data dataDeEntrada;
	private String rg;
	private String departamento;
	private boolean demitido=true;
	private double salario;

	Funcionario(String nome) {
		this.nome = nome;
		Funcionario.numFuncionarios += 1;
	}

	Funcionario() {
		Funcionario.numFuncionarios += 1;
	}

	public void setDepartamento(String departamento) {
		this.departamento = departamento;

	}

	public String getDepartamento() {

		return this.departamento;

	}

	public void setRg(String rg) {

		this.rg = rg;
	}

	public String getRg() {
		return this.rg;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

	void bonifica(double aumento) {
		this.salario += aumento;
	}

	public void setDemitido(boolean t) {
		this.demitido = t;
	}
	
	public boolean getDemitido(){
		
		return this.demitido;
	}

	public void setDataDeEntrada(int dia, int mes, int ano) {
		Data d1 = new Data(dia, mes, ano);
		this.dataDeEntrada = d1;
	}

	public String getDataDeEntrada() {

		return this.dataDeEntrada.getData();
	}

	public void mostra() {
		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());
		System.out.println("Status: "+ this.demitido);
	}

	public void setNome(String nome) {
		this.nome = nome;

	}

	public String getNome() {
		return this.nome;
	}

	public int getNumFuncionarios() {

		return Funcionario.numFuncionarios;

	}

}

class Empresa {

	private static int contador=0;
	private String nome;
	private String cnpj;
	private String endereco;
	protected Funcionario[] empregados;

	Empresa (int tamanho){
		this.empregados= new Funcionario[tamanho];
		Empresa.contador+=1;
	}
	
	public void setNome(String nome) {

		this.nome = nome;
	}

	public String getNome() {
		return this.nome;
	}

	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;

	}

	public String getCnpj() {

		return this.cnpj;
	}

	public String getEndereco() {
		return endereco;
	}

	/*public void setEmpregados(String nome) {
		this.empregados[contador].setNome(nome);
		Empresa.contador += 1;

	}*/
	
	public Funcionario getFuncionario(int posicao){
		
		return this.empregados[posicao];
		
	}

	void mostraEmpregados() {

		for (Funcionario d : empregados) {
			System.out.println(d);
		}
	}

}
class TestaFuncionario {

	public static void main(String[] args) {
		Funcionario f1 = new Funcionario();

		f1.setNome("denilson");
		f1.setSalario(500);
		f1.setDepartamento("TI");
		f1.setRg("123456");
		f1.setDataDeEntrada(01, 01, 2010);
		f1.setDemitido(true);
		System.out.println(f1.getNumFuncionarios());
		f1.mostra();

		Funcionario f2 = new Funcionario("Nuno");

		System.out.println(f2.getNumFuncionarios());
		
		System.out.println("Criando empresa");
		Empresa icaro = new Empresa(1);
		
		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();
	}

}
Magno_LC
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.

esse 'is' é para indicar o boolean

G

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");
		Empresa icaro = new Empresa(1);
		
                icaro.empregados[0] = new Funcionario();           // 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.

Empresa (int tamanho){  
        this.empregados= new Funcionario[tamanho];   // ele  criou o array de referencias de Funcionario. Ainda é preciso instanciar cada funcionário.
    }

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”.

Criado 8 de janeiro de 2011
Ultima resposta 9 de jan. de 2011
Respostas 6
Participantes 5