Array Referência

9 respostas
javatar

Olá eu estou estudando o capitulo de array na apostila FJ-11, e chegou os exercícios e estou penando, vamos começar as dúvidas:

  1. Criar uma classe empresa com os atributos isso eu já fiz.
  2. Existe uma classe funcionário eu que já criei vou postar o código abaixo:

public class Funcionario { String nome; String departamento; String rg; String cpf; String hsaida; String hentrada; boolean status = true; double salarioatual; Data dataEntrada;

Esses são os atributos da classe funcionário, e agora que chega a parte que não tenho a mínima idéia, eu tenho que criar um método adiciona dentro da classe Empresa que referência a Funcionário e em cada posição guarde um Funcionário.
Eu pensei em criar uma referência a Funcionário que tenha todos os dados do Funcionário dentro da classe Empresa, Funcionario novoFuncionario;
Então esse método:

void adiciona(Funcionario f) {
		
}

Ia ter um array que ia guardar em cada lugar um funcionário…
Não consigo nem pensar em como criar isso, poderia ser um loop e cada posição referência a um Funcionário…

9 Respostas

mapleplayer

Como vc esta aprendendo vou tentar ajudar usando array ao invés de lista

É como vc está imaginando msm, uma array que referência objetos Funcionario.

Funcionario arrayFunc = new Funcionario[10]; // array instanciada com espaço para 10 funcionários

void adiciona(Funcionario f) { for(int i = 0; i < arrayFunc.length; i++) { //vai adicionando nos espaços vazios da array }

mapleplayer

corrigindo minha declaração de array

Funcionario[] arrayFunc = new Funcionario[10];

Escreve isso na sua classe Empresa e vc terá uma array de funcionários na sua empresa.

javatar

E quando eu tenho esse array de funcionários eu vou poder acessar a class funcionário só o array? exemplo:

arrayFunc[0].saldo = 1500.0;
mapleplayer

Com essa array de Funcionario na sua classe Empresa é possível acessar os atributos de um objeto Funcionario como vc escreveu a partir de um objeto Empresa. No caso os atributos não estariam bem encapsulados.

javatar

Eu estou quase conseguindo resolver, mais agora surge outro problema vou postar os dois código abaixo:

class Empresa {
	String nome;
	String cnpj;
	String endereço;
	String telefone;
	Funcionario[] empregados;

	void adiciona(Funcionario f) {
		for(int i = 0; i<this.empregados.length; i++) {
			this.empregados[i] = f;
		}	

	}

	void mostraEmpregados() {
		for (int i = 0; i >< this.empregados.length; i++) {
			System.out.println("Funcionario na posicao: "+i+""+this.empregados[i]);
		}
	}
	
}
public class TestEmpresa {
	public static void main(String[] args) {
		Empresa empresa = new Empresa();
		empresa.empregados = new Funcionario[10];

		Funcionario f1 = new Funcionario();
		f1.salarioatual = 1000;
		empresa.adiciona(f1);

		Funcionario f2 = new Funcionario();
		f1.salarioatual = 1500;
		empresa.adiciona(f2);

		for (int i = 0; i < 9; i++) {
			Funcionario f = new Funcionario();
			f.salarioatual = 1000 + i * 100;
			empresa.adiciona(f);
		}

		empresa.mostraEmpregados();
	}
}

Quando eu executo o TestEmpresa aparece isso:

Obrigado

mapleplayer

Vou tentar instigar sua curiosidade ao invés de postar a solução

se você tentar ver o tamanho da sua array após você instância-la, por exemplo

String[] array = new String[3];
 System.out.println(array.length);

você vai notar que o tamanho dela é aquele que você reservou para ela no momento da instanciação mesmo não tendo inserido nada nela, com isso pode se concluir que quando você faz um loop na array como você esta fazendo, todas as referências Funcionario da sua array irão receber o objeto Funcionario que você passa como argumento para o método. É preciso que você insira o objeto Funcionario em um espaço vago da array, dentro do loop verifique se o índice da array já se encontra ocupado ou não, você consegue isso dessa forma

//Verifica se o indice esta vago
  if(array[indice] == null) {
    array[indice] = funcionario;
    break; // Sai do loop após inserir o funcionario no espaco vago da array
  }

espero ter ajudado

fernandoh.computacao

bom, ja li essa apostila tbm FJ-11 da caelum…

e na época oq eu fiz foi…

public void adiciona(Funcionario f) {
for (int i = 0; i <= empregados.length; i++) {
if (empregados[i] == null) {
empregados[i] = f;
break;
}
}
}

pode-se usar o enhanced-for 8) torna mais legível

javatar
Eu fiz o if para comparar se os índices estava vazio mais quando eu mando ele exibir o que tem dentro de cada índice ele não exibe, os dois códigos estão abaixo e a imagem também, eu passo certo para o método mais ele não exibe o salário que estou passando:
class Empresa {
	String nome;
	String cnpj;
	String endereço;
	String telefone;
	Funcionario[] empregados;

	public void adiciona(Funcionario f) {
		for (int i = 0; i < empregados.length; i++) {
			if (empregados[i] == null) {
				this.empregados[i] = f;
				break;
			}
		}	
	}

	void mostraEmpregados() {
		for (int i = 0; i < this.empregados.length; i++) {
			System.out.println("Funcionario na posicao: "+i+" "+this.empregados[i]);
		}
	}
	
}
public class TestEmpresa {
	public static void main(String[] args) {
		Empresa empresa = new Empresa();
		empresa.empregados = new Funcionario[10];

		Funcionario f1 = new Funcionario();
		f1.nome = "Junior";
		empresa.adiciona(f1);

		Funcionario f2 = new Funcionario();
		f2.nome = "Berg";
		empresa.adiciona(f2);

		for (int i = 0; i < 9; i++) {  
            		Funcionario f = new Funcionario();  
            		f.salarioatual = 1000 + i * 100;  
            		empresa.adiciona(f);  
       		}

		empresa.mostraEmpregados();
	}
}

Olha o que exibe:
[img]http://img24.imageshack.us/img24/7569/errofz.jpg[/img]

mapleplayer

Na verdade seu código esta rodando perfeitamente mas você não percebeu ainda o detalhe que te da a impressão que seu método não esta retornando os funcionários que você inseriu.

O suposto problema surge no seu método mostraEmpregados no seguinte trecho

this.empregados[i]

Isso faz com que a JVM chame o método toString() do objeto retornado da respectiva posição da array, no caso uma referência a um objeto Funcionário esta sendo retornada, por isso aquela saída estranha -> “Funcionário@addbf1”, o porque dessa saída estranha já é um tópico um pouco mais avançado.

Faz o seguinte para ter uma saída mais legível do seu método mostraEmpregados, substitui o código acima por

this.empregados[i].salario

espero ter ajudado

Criado 27 de dezembro de 2010
Ultima resposta 29 de dez. de 2010
Respostas 9
Participantes 3