Exercícios da Caelum fj-11 sobre arrays

pessoal, sou novo em java e OO, e queria saber como solucionar os exercicios da famosa apostila Caelum no capítulo de arrays (5.5 - Exercícios: Arrays):

  1. Volte ao nosso sistema de Funcionario e crie uma classe Empresa dentro do mesmo arquivo .java. A
    Empresa tem um nome, cnpj e uma referência a uma array de Funcionario, além de outros atributos que
    você julgar necessário.

class Empresa {

 // outros atributos
 Funcionario[] empregados;
 String cnpj;

}

ESSE PRIMEIRO EU JÁ FIZ, SÓ COLOQUEI AQUI PRA PODER COLOCAR O SEGUNDO QUE É O QUE NÃO TO SABENDO!

  1. A Empresa deve ter um método adiciona, que recebe uma referência a Funcionario como argumento, e guarda esse funcionário. Algo como:


void adiciona(Funcionario f) {
// algo tipo:
// this.empregados[ ??? ] = f;
// mas que posição colocar?
}

Você deve inserir o Funcionario em uma posição da array que esteja livre. Existem várias maneiras para
você fazer isso: guardar um contador para indicar qual a próxima posição vazia ou procurar por uma posição
vazia toda vez. O que seria mais interessante?
É importante reparar que o método adiciona não recebe nome, rg, salário, etc. Essa seria uma maneira nem
um pouco estruturada, muito menos orientada a objetos de se trabalhar. Você antes cria um Funcionario e
já passa a referência dele, que dentro do objeto possui rg, salário, etc.

e tem o terceiro e seguintes, que se puder me mandar uma idéia também, fico grato!
obrigado!

Você pode criar uma variável estática, ex:

static int controlador = 0;
e aqui vc faz assim,

void adiciona(Funcionario f) { 
     this.empregados[ controlador ] = f; 
     controlador ++;
} 

O outro dá pra fazer assim:

Funcionario f = new Funcionario();
     f.setNome("Jose");
     f.setRg("11111111").
     f.setSalario(2.500);

Agora vc chama a classe que tem o método adiciona e passa o f como referência. Ex:
Digamos que o método adiciona() esteja dentro da classe Adiciona.
Adiciona add = new Adiciona();
add.adiciona(f);

Espero ter ajudado!

Ola, tambem sou novo em java e estou lendo a msma apostila…mto boa ela neh…
intao vc pode criar um contador estatico na classe…
tpw

class Empresa {
	// outros atributos
	Funcionario[] empregados = new Funcionario[10]; //acho q precisa definir o tamanho..
	String cnpj;
	static int contador;

	void adiciona(Funcionario f) {
	if(contador<10)	
		this.empregados[contador++] = f;
	}	
} 

nao sei se ta certo mais espero ter ajudado

Muito obrigado aos 2 !
ajudou legal!
Se alguem souber onde tem na net os exercicios da caelum resolvidos fico grato!
vlww!

Vou postar aqui a minha solução para análise.

[code]
/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    /
    package Exercicios;
    /
    @author maison.souza*/

public class Empresa {

public String nome;
public int cnpj;
public Funcionario[] empregados;

public void adiciona(Funcionario f1) {
    boolean estacheio = true;
    for (int x = 0; x < empregados.length; x++) {
        if (empregados[x] == null) {
            estacheio = false;
            empregados[x] = f1;
            System.out.println( "Adicionado Funcionário  = " + this.empregados[x].nome);
            break;
        }
    }
    if (estacheio == true) {
        System.out.println("O vetor está cheio não foi possível adicionar " + f1.nome);
        Funcionario[] empregados2 = new Funcionario[this.empregados.length * 2];
        for (int i = 0; i < this.empregados.length; i++) {
            empregados2[i] = empregados[i];
        }
        for (int x = empregados.length; x < empregados2.length; x++) {
            if (empregados2[x] == null) {
                empregados2[x] = f1;
                System.out.println("Um novo vetor foi criado Adicionado Empregado  = " + empregados2[x].nome);
                empregados = empregados2;
                break;
            }
        }
    }
}

public boolean contem(Funcionario f1) {
    boolean contem;
    for (int x = 0; x < empregados.length; x++) {
        if (this.empregados[x] == f1) {
            System.out.println("Encontrado");
            contem = true;
            return true;
        }
    }
    System.out.println("Não trabalha");
    return false;
}

public void mostraEmpresa() {
    System.out.println("Nome da Empresa :" + this.nome);
    System.out.println("CNPJ: " + this.cnpj);
    mostraEmpregados();
}

public void mostraEmpregados() {
    for (int x = 0; x < this.empregados.length; x++) {
        if (empregados[x] != null) {
            System.out.println("Funcionario da posição " + x + " Funcionário = " + empregados[x].nome);
        }
    }
}

public void mostraDetalhes(Funcionario funcionario) {
    funcionario.mostraFuncionario();
}

}[/code]