Como add objetos na array

2 respostas
amor_et_tussis_non_c

Olá pessoal… alguem poderia me ajuda…?

toh estudando pela apostila da caelum e parei no exc. sobre arrays…
…toh postando as partes q jah fiz para q por favor me digam onde toh errando pois naum consigo add os objetos na array …qdo tento roda o “TestaEmpresa”.

desde jah mto obrigado.

class Funcionario{

String nome;

String departamento;

String rg;

double salario;

String admissao;

boolean estaNaEmpresa;
//Método construtor

public Funcionario(String n, String dep, String r, double sal, String adm, boolean ene){

nome = n;
  departamento = dep;
  rg = r;
  salario = sal;
  admissao = adm;
  estaNaEmpresa = ene;

}

//método que soma os bonus ao salario
public void bonifica(double bonus){

double novoSalario = this.salario + bonus;

this.salario = novoSalario;

}
//método q verifica se o funcionario foi demitido
public void demite(boolean demitido){

if(demitido == true){

System.out.println(Funcionario demitido.);

this.estaNaEmpresa = false;

}

}
//método q verifica se o funcionario estah na empresa
public void trabalhando(){

if(this.estaNaEmpresa == true){

System.out.println(Funcionario trabalhando!);

}

else{

System.out.println(Funcionario não está trabalhando!);

}

}
//mostra os atributos

public void mostra(){

System.out.println(Nome: +this.nome+”\nDepartamento: "

+this.departamento+”\nRg: "+this.rg+

"\nSalario: “+this.salario+”\nData Admissão: "

+ this.admissao);	

}

}

class Empresa{

String nome;

String cnpj;

String end;

Funcionario [] funcionarios;

int pos=0;

//método construtor

public Empresa(String n, String c, String e){
nome = n;
    cnpj = c;
    end = e;
}	    	

// método q adiciona os funcionarios no array

public void adiciona(Funcionario f){

if(this.pos == funcionarios.length){

System.out.println(O array estah cheio!);

}

else{

this.funcionarios[this.pos] = f;

this.pos++;

}
}

public void mostra(){

System.out.println(Empresa: +this.nome+”\nCNPJ: +this.cnpj+”\nEndereco: +this.end+”\n);

for(int i = 0; i <= this.funcionarios.length; i++){

System.out.println(funcionarios[i]);

}

}

}

class TestaEmpresa{

public static void main (String [] args){

Empresa empresa = new Empresa("Natura", "123-456.56", "Java");
   empresa.funcionarios = new Funcionario[5];
       
   Funcionario[] funcionarios;
   Funcionario f1 = new Funcionario("Marcos", "Picking", "23.456.789.1", 845, "02/01/2008", true);
   empresa.mostra();	
   f1.bonifica(262);
   f1.demite(false);
   f1.mostra();
   empresa.adiciona(f1);

2 Respostas

amor_et_tussis_non_c

…vlw mesmo LuizRocha…me ajudo mto.

[]'s

LuizRocha:
Ola.

Peguei o teu código e vi aqui. Tá dando ArrayIndexOutOfBoundsException só por causa de um errinho:
Se um array tem X posições, os índices deles vão de 0 a (X-1). Assim, se o teu tem 5, ele só tem as posições de 0 a 4. Logo, no teu “for”, tu deve pôr:

for(int i=0; i<tamanhoDoTeuArray;i++) // use <, e não <=.
O erro ocorre quando ele tenta ler uma posição que não existe: a número 5.

Outra coisa: no método mostra da classe empresa tu manda imprimir todas as posições do array, ainda que nem todas estejam preenchidas. Tu poderia Evitar isso fazend a variável “i” do teu for ir até “pos” em vez de “funcionarios.length”. Fica melhor.

E o método demite: se eu usar demite(false) não acontece nada. Então pra que colcar argumentos em demite?
E se eu quisesse readmitir um funcionário? Não dá? Você poderia fazer um “setNaEmpresa(boolean dentro)” que serviria tanto pra demitir quanto para readmitir.

Mas é assim mesmo. No mais está bem para um programador básico. Eu não sou ninguém pra julgar você.
Continue estudando!

Ou

Luiz_Rocha

Ola.

Peguei o teu código e vi aqui. Tá dando ArrayIndexOutOfBoundsException só por causa de um errinho:
Se um array tem X posições, os índices deles vão de 0 a (X-1). Assim, se o teu tem 5, ele só tem as posições de 0 a 4. Logo, no teu “for”, tu deve pôr:

for(int i=0; i<tamanhoDoTeuArray;i++) // use <, e não <=.
O erro ocorre quando ele tenta ler uma posição que não existe: a número 5.

Outra coisa: no método mostra da classe empresa tu manda imprimir todas as posições do array, ainda que nem todas estejam preenchidas. Tu poderia Evitar isso fazend a variável “i” do teu for ir até “pos” em vez de “funcionarios.length”. Fica melhor.

E o método demite: se eu usar demite(false) não acontece nada. Então pra que colcar argumentos em demite?
E se eu quisesse readmitir um funcionário? Não dá? Você poderia fazer um “setNaEmpresa(boolean dentro)” que serviria tanto pra demitir quanto para readmitir.

Mas é assim mesmo. No mais está bem para um programador básico. Eu não sou ninguém pra julgar você.
Continue estudando!

Ou

Criado 21 de fevereiro de 2008
Ultima resposta 21 de fev. de 2008
Respostas 2
Participantes 2