FJ-11 Cap05-Ex07

O exercício pede que se faça a realocação de um array, caso o mesmo já esteja cheio.

Não sei se resolvi o exercício da melhor forma. Então criei o tópico para receber algumas críticas.

[code]class Empresa {
String nome;
String cnpj;
Funcionario[] empregados = new Funcionario[10];
int contador;

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

}

[/code]

A lógica está certinha. Parabéns! Você pode, no entando, dar uma melhorada no código fazendo mais uso da API.

No lugar do seu for, você pode usar System.arrayCopy pra ficar mais bacana:

Funcionario[] temp = new Funcionario[this.empregados.length + 10]; System.arrayCopy(this.empregados, 0, temp, 0, this.empregados.length);

Se estiver usando Java 6, pode deixar mais legal ainda usando Arrays.copyOf (http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#copyOf%28U[],%20int,%20java.lang.Class%29):

if (contador == this.empregados.length)
  this.empregados = Arrays.copyOf(this.empregados, this.empregados.length + 10, Funcionario.class);
}  
this.empregados[contador++] = f;

Pegando um gancho do seu outro post (sobre números hard coded), o seu número “10” ali pode ser considerado hard coded (alguns chamam de “magic number”). Você poderia externalizá-lo de alguma forma (deixo para você pensar em como externalizar, pode usar este tópico para postar como fez e a gente vai te ajudando).

Obrigado!

Por favor, evite marcar tópicos com informações óbvias como [Dúvida] ou [Ajuda].

ViniGodoy,

Desculpe. É que alguns fóruns costumam pedir que se faça essas marcações. É a força do hábito.