Começo por agradecer qualquer ajuda que possam dar.
O erro é simples, aparentemente estou a exceder o limite do array, no entanto, não percebo como.
Coloquei alguns prints dentro dos ciclos para ver como o programa estava a correr.
Não percebo se o tamanho é 5, como é que o programa "rebenta" logo na introdução do terceiro elemento.
Tenho a classe de TestEnterprise, onde o problema se coloca logo no main, dentro do for, onde estou a fazer o prenchimento do array:
[code]package Caelum_JavaOrientacaoObjectos;
public class TestEnterprise {
static void createBigArray (Employee[]e){
int size = e.length +5;
Employee[] newEmployees = new Employee[size];
for (int i = 0; i < e.length -1; i++) {
newEmployees [i] = e[i];
}
e = newEmployees;
Enterprise.arrayPosition = e.length;
}
public static void main(String[]args){
// creates the Enterprise
Enterprise bigOne = new Enterprise();
// adds the array to the Enterprise
bigOne.employees = new Employee[5];
// creates employee and add to the enterprise
Employee j = new Employee();
bigOne.addEmployee(j);
//creates employee without adding
Employee s = new Employee();
//adding to the array
for (int i = 0; i < 4; i++) {
System.out.println("inside the for "+i);
Employee f = new Employee();
f.salary = 1000 + i * 100;
bigOne.addEmployee(f);
if
(bigOne.employees.length == bigOne.arrayPosition) System.out.println("Error! All positions already token.");
createBigArray(bigOne.employees);
}
bigOne.showEmployees();
if
(bigOne.employeeBelongs(s)) System.out.println("Belongs.");
else
System.out.println("Employee doesn't belong.");
}
}
[/code]
e a classe Enterprise onde se processa o adicionar do Funcionário no array:
[code]package Caelum_JavaOrientacaoObjectos;
public class Enterprise {
String name;
int code;
Employee[] employees;
static int arrayPosition = 0;
void addEmployee(Employee e) {
int i = (int) (10*Math.random());
this.employees[arrayPosition] = e;
System.out.println("inside add employee "+this.employees[arrayPosition]);
e.name = "nome"+i;
arrayPosition++;
}
void showEmployees() {
for (int i = 0; i < this.employees.length; i++) {
//System.out.println("Employee on position: " + i+ " has salary: "+employees[i].salary);
this.employees[i].shows();
}
}
boolean employeeBelongs(Employee e){
for (Employee x : this.employees) {
if (e == x){
return true;
}
}
return false;
}
}
[/code]
Alguém pode me dar umas luzes do que estarei a fazer mal?
Fica o print do erro, com os respectivos System.outs de controlo, que o programa dá antes de parar:
inside add employee Caelum_JavaOrientacaoObjectos.Employee@190d11
inside the for 0
inside add employee Caelum_JavaOrientacaoObjectos.Employee@a90653
inside the for 1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at Caelum_JavaOrientacaoObjectos.Enterprise.addEmployee(Enterprise.java:12)
at Caelum_JavaOrientacaoObjectos.TestEnterprise.main(TestEnterprise.java:32)