Arrays

Boa noite galera, venho pela primeira vez pedir a ajuda de vocês. Estou tento um problema para exibir o campo salário de um funcionário. A estrutura do meu pequeno sistema consiste de uma classe usuario, empresa e testeEmpresa:

public class Funcionario {

double salario;

String nome;

String departamento;

Data dataDeEntrada;

    String RG;

    double ganhoAnual;

}	

}

public class Empresa {

String nome;
String cnpj;
Funcionario[] empregados;

void adiciona(Funcionario f){
	for(int i = 0; i< empregados.length; i++){
		empregados[i] = f;
	}
}
void mostrarSalario(){
	for(int i = 0; i<this.empregados.length; i++){
		
		System.out.println(empregados[i].salario);
	}
}

}

public class TestaEmpresa {
public static void main(String[] args) {

    Empresa empresa = new Empresa();
empresa.empregados = new Funcionario[10];

Funcionario f1 = new Funcionario();
f1.nome = "Pedro";
f1.salario = 1500;
f1.departamento = "logistica";


//System.out.println(empresa.empregados[0].salario);

Funcionario f2 = new Funcionario();
f1.nome = "Caio";
f1.salario = 1800;
f1.departamento = "administracao";
empresa.adiciona(f1);
empresa.adiciona(f2);

empresa.mostrarSalario();

}
}
Quanto executo o método mostrarSalario(), apenas exibe o valor default do campo salário (0.0), não é passado os valores que atribui a instâcia de cada funcionário: 1500, 1800. Gostaria de saber onde errei no cógido acima e o que poderiam me sugerir? Desde já agradeço e um feliz natal

Antes de pedir ajuda no fórum, por favor, siga nossas normas de postagem. Em especial, essa aqui:

As demais podem ser lidas aqui:

de uma olhada no método adiciona:

                   // Recebe um funcionario como parametro
void adiciona(Funcionario f){ 
for(int i = 0; i< empregados.length; i++){ 
// vamo supor que o seu empregados.length retorne 10.. você vai atribuir de i até 10 o mesmo funcionário?
// ou vamos supor que você não adicionou nenhum funcionário se i é = a 0 e empregados.length retorna 0... o que está acontecendo?
empregados[i] = f; 
}

Vai uma dica… Você tem que descobrir qual é a posição vazia para gravar seu funcionário no vetor.Faça um indice de controle inicialmente e depois tente aperfeiçoar utilizando recursos da própria linguagem.

     //variavel global
     int index = 0 ;

     public void adiciona(Funcionario f)
{
   empregados[index] = f;
   index++;
}

Você inicializou um objeto funcionário, e passou como argumento para o método adiciona! Só que tem um porém…Você não atribuiu valores para as variáveis de instância de objeto que você criou…

Funcionario f2 = new Funcionario(); f1.nome = "Caio"; f1.salario = 1800; f1.departamento = "administracao"; empresa.adiciona(f1); empresa.adiciona(f2);

deveria ser :

Funcionario f2 = new Funcionario(); f2.nome = "Caio"; f2.salario = 1800; f2.departamento = "administracao"; empresa.adiciona(f1); empresa.adiciona(f2);

Outro problema é que:
Esse método de adiciona está errado, ele sempre vai atribuir para todos as variáveis de referência da matriz a cópia do que você passou por valor.

[code]public class Empresa {

String nome;
String cnpj;
Funcionario[] empregados;
public static int i = 0;
int y=0;

void adiciona(Funcionario f){
for(int y = i; y < empregados.length; y++){
empregados[y] = f;
i=+1;
}
}
void mostrarSalario(){
for(int y = 0; y<this.empregados.length; y++){

System.out.println(empregados[y].salario);
}
}
}
[/code]

Outra coisa não esqueça do encapsulamento, de fato, isso é muitoooo importante!

Outra coisa… isto que você está utilizando é um vector não um array.

Você deve sempre pensar o porque de utilizar y ou z.

Exemplo:

Ao adicionar um funcionário você está utilizando uma estrutura de repetição. Porque?
realmente é necessário?

Você simplemente poderia fazer;

void adicionaFuncionario(Funcionario f)
{
      /*Pense e veja se isto está certo se sim porque ou caso contrário porque não?
      Lembre-se que o indice inicial do vetor é 0.
      */
      int i = empregados.length;
      empregados[i] = f;
}

Bons estudos (: