Olá galera. Estou fazendo um exercício da apostila da Caelum e estou com um problema em relação a realocação de arrays. O exercício é este:
6) Caso a array já esteja cheia no momento de adicionar um outro funcionário, criar uma nova maior e copiar os valores. Isto é, fazer a realocação já que java não tem isso: uma array nasce e morre com o mesmo length.
Meu código está assim:
Classes Data e Funcionário
public class Data {
int dia;
int mes;
int ano;
}
public class Funcionario {
String nome;
String departamento;
double salario;
Data dataDeEntrada;
String RG;
boolean estaNaEmpresa;
void bonifica(double valor) {
this.salario += valor;
}
void demite() {
this.estaNaEmpresa = false;
}
void mostra() {
System.out.println("Nome: " + nome);
System.out.println("Departamento: " + departamento);
System.out.println("Salário: " + salario);
System.out.println("Dia: " + this.dataDeEntrada.dia);
System.out.println("Mês: " + this.dataDeEntrada.mes);
System.out.println("Ano: " + this.dataDeEntrada.ano);
System.out.println("RG: " + RG);
System.out.println("Está na empresa? " + estaNaEmpresa);
}
}
public class Empresa {
String nome;
String cnpj;
String endereco;
Funcionario[] funcionarios = new Funcionario[10];
void adiciona(Funcionario f) {
for (int i = 0; i < this.funcionarios.length; i++) {
if (this.funcionarios[i] == null) {
this.funcionarios[i] = f;
return;
}
}
Funcionario[] funcionarios2 = new Funcionario[20];
for (int i = 0; i < this.funcionarios.length; i++) {
funcionarios2[i] = funcionarios[i];
}
for (int i = this.funcionarios.length; i < funcionarios2.length; i++) {
if (funcionarios2[i] == null) {
funcionarios2[i] = f;
}
}
System.out.println(funcionarios2[12].nome); // -> [b]AQUI ESTA O GRANDE X DA QUESTÃO[/b]
}
boolean contem(Funcionario f) {
for (int i = 0; i < funcionarios.length; i++) {
this.funcionarios[i] = f;
if (this.funcionarios[i] != null) {
System.out.println("O funcionario " + this.funcionarios[i].nome + " está na empresa");
this.funcionarios[i].estaNaEmpresa = true;
// break;
}
else {
if(this.funcionarios[i] == null) {
System.out.println("Este não está na empresa");
this.funcionarios[i].estaNaEmpresa = false;
break;
}
}
}
return false;
}
}
Classe Principal
public class Principal {
public static void main(String[] args) {
Empresa empresa = new Empresa();
Funcionario f1 = new Funcionario();
f1.salario = 1000;
f1.nome = "Paulo";
empresa.adiciona(f1);
Funcionario f2 = new Funcionario();
f2.salario = 2000;
f2.nome = "Carlos";
empresa.adiciona(f2);
Funcionario f3 = new Funcionario();
f3.salario = 3000;
f3.nome = "Maria";
empresa.adiciona(f3);
Funcionario f4 = new Funcionario();
f4.salario = 4000;
f4.nome = "Jéssica";
empresa.adiciona(f4);
Funcionario f5 = new Funcionario();
f5.salario = 5000;
f5.nome = "Teotônio";
empresa.adiciona(f5);
Funcionario f6 = new Funcionario();
f6.salario = 6000;
f6.nome = "Flávia";
empresa.adiciona(f6);
Funcionario f7 = new Funcionario();
f7.salario = 7000;
f7.nome = "Isaac";
empresa.adiciona(f7);
Funcionario f8 = new Funcionario();
f8.salario = 7000;
f8.nome = "Luciano";
empresa.adiciona(f8);
Funcionario f9 = new Funcionario();
f9.salario = 7000;
f9.nome = "Aurélio";
empresa.adiciona(f9);
Funcionario f10 = new Funcionario();
f10.salario = 10000;
f10.nome = "Fábio";
empresa.adiciona(f10);
Funcionario f11 = new Funcionario();
f11.salario = 11000;
f11.nome = "Geraldo";
empresa.adiciona(f11);
Funcionario f12 = new Funcionario();
f12.salario = 12000;
f12.nome = "Farias";
empresa.adiciona(f12);
Funcionario f13 = new Funcionario();
f13.salario = 13000;
f13.nome = "Vargas";
empresa.adiciona(f13);
Funcionario f14 = new Funcionario();
f14.salario = 14000;
f14.nome = "Lucas";
empresa.adiciona(f14);
Funcionario f15 = new Funcionario();
f15.salario = 15000;
f15.nome = "Felipe";
empresa.adiciona(f15);
}
}
Então quando eu vou compliar, aparece os ultimos 5 nomes sendo q eu queria q aparecesse só um, pois coloquei System.out.println(funcionarios2[12].nome), o q deveria aparecer apenas o décimo terceiro nome, mas aparece os últimos 5.. E gostaria se possivel q avisassem outros erros deste código. Desde já muito obrigado!!!